android listview checkbox 选中状态,Android ListView专题之十  checkbox选中的值在翻屏时会跳来跳去...

翻屏前选择了2,3,4,5

a4c26d1e5885305701be709a3d33442f.png

翻屏后

a4c26d1e5885305701be709a3d33442f.png

向上翻屏,选择的还是2,3,4,5

a4c26d1e5885305701be709a3d33442f.png

其实就是红色的地方是关键点,用了一个集合来保存cb的选择状态,其它的关于viewHolder和和inflate的布局什么就不说了

public class ListViewCheckboxActivityextends

Activity implements OnCheckedChangeListener {

private ListView listView;

private

List

Object>> list;

private CheckBox cball;

ListViewAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

listView = (ListView)

findViewById(R.id.lv);

cball = (CheckBox)

findViewById(R.id.cball);

cball.setOnCheckedChangeListener(this);//全选

list = buildList();

adapter = new

ListViewAdapter(this, list);

listView.setAdapter(adapter);

}

private

List

Object>> buildList() {

List

Object>> list = new

ArrayList

Object>>();

for (int i = 0; i

< 20; i++) {

Map map = new

HashMap();

map.put("icon", R.drawable.icon);

map.put("title", "主题" + (i + 1));

list.add(map);

}

return list;

}

class ListViewAdapter extends BaseAdapter {

private Context context;

private

List

Object>> list;

private LayoutInflater

inflater;

private

List checkBoxesStatus;

public ListViewAdapter(Context

context, List

Object>> list) {

super();

this.context =

context;

this.list =

list;

int listsize =

list.size();

checkBoxesStatus = new

ArrayList(listsize);

for(int i =

0;i

checkBoxesStatus.add(false);

}

this.inflater

= LayoutInflater.from(context);

}

public

List

Object>> getList() {

return

list;

}

public

List getCheckBoxesStatus()

{

return

checkBoxesStatus;

}

@Override

public int getCount() {

return

list.size();

}

@Override

public Object getItem(int

position) {

return

list.get(position);

}

@Override

public long getItemId(int

position) {

return

position;

}

@Override

public View getView(final int

position, View convertView, ViewGroup parent) {

ViewHolder

viewHolder = null;

Map map =

list.get(position);

Boolean

checkBoxStatus = checkBoxesStatus.get(position);

if

(convertView == null) {

convertView

= inflater.inflate(R.layout.list_item, null);

viewHolder =

new ViewHolder();

viewHolder.img = (ImageView)

convertView.findViewById(R.id.icon);

viewHolder.tv = (TextView)

convertView.findViewById(R.id.title);

viewHolder.cb = (CheckBox) convertView.findViewById(R.id.cb);

convertView.setTag(viewHolder);

}else{

viewHolder =

(ViewHolder) convertView.getTag();

}

viewHolder.img.setImageResource((Integer) map.get("icon"));

viewHolder.tv.setText((String) map.get("title"));

viewHolder.cb.setId(position);

viewHolder.cb.setChecked(checkBoxStatus);

viewHolder.cb.setOnCheckedChangeListener(new

OnCheckedChangeListener() {

@Override

public void

onCheckedChanged(CompoundButton buttonView, boolean isChecked)

{

checkBoxesStatus.set(buttonView.getId(), isChecked);

notifyDataSetChanged();

}

});

return

convertView;

}

}

static class ViewHolder {

private ImageView img;

private TextView tv;

private CheckBox cb;

}

@Override

public void onCheckedChanged(CompoundButton

buttonView, boolean isChecked){

List checkBoxesStatus =

adapter.getCheckBoxesStatus();

for(int i =

0;i

checkBoxesStatus.set(i, isChecked);

}

adapter.notifyDataSetChanged();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值