ListView或者Gallery结合checkBox使用

网上大部分的这类例子都是事先定好了item数量,无法实时增加item并得到check状态,

还有一个问题,要考虑到 CheckBox 的状态保持。比如程序开始运行后,在屏幕上显示 ListView 中的第 0~ 第5 个条目,第 6 、 7 两个条目在屏幕上不可见,这时候,我们点击第 0 个条目的 CheckBox ,那么这个 CheckBox 就会被显示为 Checked 的状态,然后我们将整个 ListView 向下滚动到底,那么第 0 个条目就不可见了。如果我们再将整个 ListView 向上滚动到头,那么此时第 0 个条目又可见了,如果不做一些处理,我们将会发现,第 0 个条目对应的 CheckBox 本应该处于 Checked 状态,但在它重新出现时,居然自动变成了 unChecked 的状态。

这个代码可以很好解决这两个问题


gallery_item.xml





    
 	
	
	 





MyGalleryAdapter:

public class MyGalleryAdapter extends SimpleAdapter{
	
	private boolean checkBoxShow = false;
	ArrayList checkList = new ArrayList();
	
	
	public MyGalleryAdapter(Context context, List> data,
			int resource, String[] from, int[] to) {
		super(context, data, resource, from, to);
		// TODO Auto-generated constructor stub  
        
	}
	
	
	public ArrayList getCheckList(){
		return checkList;
	}
	
	
	/**
	 * 建立一个记录每个item的checkbox状态的list,然后刷新每个item。
	 * @param itemlist
	 */
	public void notifyDataSetChanged(ArrayList> itemlist) {
		// TODO Auto-generated method stub
		
		checkList.clear();
		for(int i=0; i



Activity中的代码:

adapter = new MyGalleryAdapter(this, list, R.layout.gallery_item, new String[]{Constant.KEY_NAME,"KeyCheckBox"}, new int[]{R.id.gallery_item_text,R.id.gallery_item_checkbox});
		searchGallery.setAdapter(adapter);


获取选中的checkBox的idx

ArrayList myCheckedList = adapter.getCheckList();
				if(myCheckedList.size()!=0){
					for(int i=0; i

隐藏checkBox

adapter.setCheckBoxShow(false);


如果实时增加item后,需要调用

adapter.notifyDataSetChanged(list);

来增加Adapter中的ArrayList记录,同时刷新ListView或者Gallery的显示



在使用ListView和Gallery的时候,要注意因为 ListView 可以在垂直方向滚动,那么总有一些条目是在屏幕上看不到的,这些看不到的条目,如果你试图用 ListView.GetChildAt(intposition) 去获取它时,你会发现得到的结果将会是 null 。

你可能感兴趣的:(android,java)