Android之记录ListView的checkbox选择位置问题

直接上代码了:

<CheckBox 
        android:id="@+id/checkbox"
        android:focusable="false" // 必须有
        android:clickable="false"  // 必须有
        android:layout_marginLeft="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
public class ListViewCheckBoxActivity extends Activity {
    private ListView listview;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);        
        listview = (ListView) findViewById(R.id.listview);
        MyAdapter adapter=new MyAdapter(this);    
        listview.setAdapter(adapter);    
        listview.setItemsCanFocus(false);    
        listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);    
        listview.setOnItemClickListener(new OnItemClickListener(){    
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                System.out.println("aa");
                ViewHolder vHollder = (ViewHolder) view.getTag();    
                //在每次获取点击的item时将对于的checkbox状态改变,同时修改map的值。    
                vHollder.cBox.setChecked(true);
                boolean check = vHollder.cBox.isChecked();
                MyAdapter.isSelected.put(position, check); 
            }    
        });  
    }
}
package com.lee0000.ListViewCheckBox;
import java.util.ArrayList;    
import java.util.HashMap;    
import java.util.List;    
import java.util.Map;    
    
import android.content.Context;    
import android.view.LayoutInflater;    
import android.view.View;    
import android.view.ViewGroup;    
import android.widget.BaseAdapter;    
import android.widget.CheckBox;    
import android.widget.ImageView;    
import android.widget.TextView;    
    
public class MyAdapter extends BaseAdapter {    
    private LayoutInflater mInflater;    
    private List<Map<String, Object>> mData;    
    public static Map<Integer, Boolean> isSelected;    
    public MyAdapter(Context context) {    
        mInflater = LayoutInflater.from(context);    
        init();    
    }    
    
    //初始化    
    private void init() {    
        mData=new ArrayList<Map<String, Object>>();    
        for (int i = 0; i < 25; i++) {    
            Map<String, Object> map = new HashMap<String, Object>();    
            map.put("title", "第" + (i + 1) + "行的标题");    
            mData.add(map);    
        }    
        
        //这儿定义isSelected这个map是记录每个listitem的状态,初始状态全部为false。    
        isSelected = new HashMap<Integer, Boolean>();    
        for (int i = 0; i < mData.size(); i++) {    
            isSelected.put(i, false);    
        }    
    }    
    
    @Override    
    public int getCount() {    
        return mData.size();    
    }    
    
    @Override    
    public Object getItem(int position) {    
        return mData.get(position);    
    }    
    
    @Override    
    public long getItemId(int position) {    
        return position;    
    }    
    
    @Override    
    public View getView(int position, View convertView, ViewGroup parent) {    
        ViewHolder holder = null;    
        //convertView为null的时候初始化convertView。    
        if (convertView == null) {    
            holder = new ViewHolder();    
            convertView = mInflater.inflate(R.layout.listviewcontent, null);    
            holder.title = (TextView) convertView.findViewById(R.id.text);    
            holder.cBox = (CheckBox) convertView.findViewById(R.id.checkbox);    
            convertView.setTag(holder);    
        } else {    
            holder = (ViewHolder) convertView.getTag();    
        }    
         
        holder.title.setText(mData.get(position).get("title").toString());    
        holder.cBox.setChecked(isSelected.get(position));    
        return convertView;    
    }    
    
    public class ViewHolder {    
        public TextView title;    
        public CheckBox cBox;    
    }    
}    
原文地址:https://www.cnblogs.com/lee0oo0/p/2836966.html