【Android基礎篇】SimpleAdapter重寫時響應CheckBox複選框狀態改變,androidcheckbox

來源:互聯網
上載者:User

【Android基礎篇】SimpleAdapter重寫時響應CheckBox複選框狀態改變,androidcheckbox

在使用自訂ListView時,往往需要自己基於SimpleAdapter重寫適配器,承接上篇在自訂Adapter實現按鈕響應,今天實現響應CheckBox。
和上篇一樣,我們需要在重寫的MySimpleAdapter中添加一個MainActivity的變數,用於調用MainActivity的改變List<Map<String,Object>>中的資料的方法,這樣才能達到重新整理
ListView的目的。代碼如下:

這是MainActivity中調用List<Map<String,Object>>變數改變裡面的資料然後重新整理ListView的方法,傳入參數是ListView中的Item序號和改變的布爾值(因為只修改CheckBox):

 public void setChecked(int position,boolean m){        Map<String,Object> map = today_plan_listItems.get(position);        map.put("check", m);    listItems.set(position, map);    listView.invalidate(); }

listItems是List<Map<String,Object>>變數,
listView是ListView變數

下面是MySimpleAdapter類全部的代碼:

package com.plan;import java.util.List;import java.util.Map;import android.content.Context;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.Toast;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.SimpleAdapter;import com.example.plan.R;public class MySimpleAdapter extends SimpleAdapter{    MainActivity context;    public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {        super(context, data, resource, from, to);        this.context = (MainActivity) context;        // TODO Auto-generated constructor stub    }     public View getView(int position, View convertView, ViewGroup parent) {            // TODO Auto-generated method stub            View v = super.getView(position, convertView, parent);            Button btn=(Button) v.findViewById(R.id.button1);            final CheckBox check = (CheckBox)v.findViewById(R.id.checkBox_complish);            final int p = position;            Log.d("Position", Integer.toString(position));            //複選框的響應            check.setOnClickListener(new OnClickListener(){                @Override                public void onClick(View v) {                    // TODO Auto-generated method stub                    String s = (p+":"+check.isChecked());                    Toast.makeText(context, s, 2000).show();                    if(check.isChecked()){                        context.setChecked(p, true);                    }else if(!check.isChecked()){                        context.setChecked(p, false);                    }                }            });            btn.setOnClickListener(new OnClickListener() {                   @Override                public void onClick(View v) {                   // TODO Auto-generated method stub                   //Toast.makeText(context, "刪除"+Integer.toString(p),2000).show();                    context.deleteItemsTodayPlanList(p);                }          });          return v;        }}

複選框check響應的原理是監聽它的OnClickListner事件,原狀態為false,點擊後就為true。
注意,在這裡最好別監聽OnCheckedChangeListener事件,因為一旦使用這個監聽器,每次的ListView重新整理都是一次狀態改變,處理起來會很麻煩。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.