android ListView中Checkbox实现单选,全选,全不选功能

@Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.group_list2);

  initBottomBar();

  listView = (ListView) findViewById(R.id.groupListView);

  GroupService service = new GroupService(this);
  groupList = service.getGroupList(null);
  adapter = new GroupListAdapter(this, groupList);
  listView.setAdapter(adapter);

  listView.setOnItemClickListener(new OnItemClickListener() {

   @Override
   public void onItemClick(AdapterView<?> adapterView, View view, int position,
     long arg3) {
    // TODO Auto-generated method stub
    Group group = groupList.get(position);
    CheckBox ctb = (CheckBox) view.findViewById(R.id.checkBox);
    ctb.toggle();
    adapter.selectedMap.put(group.id, ctb.isChecked());
    adapter.notifyDataSetChanged();
    if(adapter.selectedMap.containsValue(true)){
     add2ScanListBtn.setEnabled(true);
    }else{
     add2ScanListBtn.setEnabled(false);
    }
   }
  });

 }

 private  void initBottomBar(){
  bottomBarView = (LinearLayout) findViewById(R.id.bottomBar);
  add2ScanListBtn = (Button) bottomBarView.findViewById(R.id.add2ScanListBtn);
  add2ScanListBtn.setEnabled(false);
  checkBtn = (Button) bottomBarView.findViewById(R.id.checkBtn);
  closeCheckBtn = (Button) bottomBarView.findViewById(R.id.closeCheckBtn);

  add2ScanListBtn.setOnClickListener(this);
  checkBtn.setOnClickListener(this);
  closeCheckBtn.setOnClickListener(this);
 }
@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, MENU_EDITOR, 0, "编辑");
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case MENU_EDITOR:
			setCheckBoxVisible(View.VISIBLE);
			adapter.notifyDataSetChanged();
			break;

		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.add2ScanListBtn:
			GroupService service = new GroupService(this);
			service.add2ScanList(adapter.selectedMap);
			for (Group group : groupList) {
				adapter.selectedMap.put(group.id, false);
			}
			setCheckBoxVisible(View.GONE);
			adapter.notifyDataSetChanged();
			break;
		case R.id.checkBtn:
			CharSequence text = checkBtn.getText();
			if (getText(R.string.checkAll).equals(text)) {
				for (int i = 0; i < adapter.getCount(); i++) {
					Group group = groupList.get(i);
					adapter.selectedMap.put(group.id, true);
				}
				checkBtn.setText(getText(R.string.checkNeither));
				add2ScanListBtn.setEnabled(true);
			}else if(getText(R.string.checkNeither).equals(text)){
				for (int i = 0; i < adapter.getCount(); i++) {
					Group group = groupList.get(i);
					adapter.selectedMap.put(group.id, false);
				}
				checkBtn.setText(getText(R.string.checkAll));
				add2ScanListBtn.setEnabled(false);
			}

			adapter.notifyDataSetChanged();
			break;
		case R.id.closeCheckBtn:
			setCheckBoxVisible(View.GONE);
			adapter.notifyDataSetChanged();
			break;
		default:
			break;
		}
	}

 

//设置checkbox是否可见
	private void setCheckBoxVisible(int state){
		bottomBarView.setVisibility(state);
		for (int i = 0; i < adapter.getCount(); i++) {
			Group group = groupList.get(i);
			adapter.visibleMap.put(group.id, state);
		}
	} 
class GroupListAdapter extends BaseAdapter{

		private Context context;
		private List<Group> groupList;
		private Map<Integer, Boolean> selectedMap;//保存checkbox是否被选中的状态
		private Map<Integer, Integer> visibleMap ;
		public GroupListAdapter(Context context, List<Group> groupList) {
			this.context = context;
			this.groupList = groupList;
			selectedMap = new HashMap<Integer, Boolean>();
			visibleMap = new HashMap<Integer, Integer>();
			for (Group group : groupList) {
				selectedMap.put(group.id, false);
				visibleMap.put(group.id, View.GONE);
			}
		}
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return groupList.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			final ViewHolder holder;
			if (convertView == null) {
				holder = new ViewHolder();
				convertView = LayoutInflater.from(context).inflate(R.layout.group_list2_item, null);
				holder.groupNameCTV = (TextView) convertView.findViewById(R.id.groupNameTV);
				holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			Group group = groupList.get(position);
			holder.groupNameCTV.setText(group.m_strGroupName);
			holder.checkBox.setVisibility(visibleMap.get(group.id));
			holder.checkBox.setChecked(selectedMap.get(group.id));
			return convertView;
		}

		private class ViewHolder{
			TextView groupNameCTV;
			CheckBox checkBox;
		}
	}

group_list2.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical">
  	  <LinearLayout android:layout_height="0dip"
	  	android:layout_width="match_parent"
	  	android:layout_weight="1">
	  	<ListView android:id="@+id/groupListView"
	  		android:layout_width="match_parent"
	  		android:layout_height="match_parent"
	  		android:divider="#999999"
	  		android:dividerHeight="1sp"
	  		/>
  		</LinearLayout>

  		<LinearLayout android:id="@+id/bottomBar"
  			android:layout_height="wrap_content"
		  	android:layout_width="match_parent" android:gravity="center_horizontal"
		  	android:padding="5dip" android:background="@drawable/buttonbar"
		  	android:visibility="gone">
		  	<Button android:id="@+id/add2ScanListBtn"
			    android:layout_width="wrap_content"
			    android:layout_height="wrap_content"
			    android:text="@string/add2ScanList"/>
		    <Button android:id="@+id/checkBtn"
			    android:layout_width="wrap_content"
			    android:layout_height="wrap_content"
			    android:text="@string/checkAll" />
			<Button android:id="@+id/closeCheckBtn"
			    android:layout_width="wrap_content"
			    android:layout_height="wrap_content"
			    android:text="@string/cancel" />
  		</LinearLayout>
</LinearLayout>

group_list2_item.xml

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal"
  >

  		<TextView android:id="@+id/groupNameTV"
		  	android:layout_width="wrap_content"
		  	android:layout_height="wrap_content"
		  	android:textSize="20dip"
		  	android:layout_alignParentLeft="true"
		  	android:textColor="@android:color/white"
		  	android:layout_marginTop="12dip"
		  	android:layout_marginLeft="5dip"
		  	android:paddingBottom="12dip"
		  	/>

		<CheckBox android:id="@+id/checkBox"
			android:layout_width="wrap_content"
	    	android:layout_height="wrap_content"
	  		android:layout_alignParentRight="true"
	  		android:layout_marginRight="5dip"
	  		android:clickable="false"
		  	android:focusable="false"
		  	android:focusableInTouchMode="false"
	    />

</RelativeLayout>

 

 

 

时间: 2024-08-24 07:27:19

android ListView中Checkbox实现单选,全选,全不选功能的相关文章

android listview中checkbox(购物车,批量操作)

最近在做购物车这里. 在做全选的时候 总会出现getchillat()空指针的问题,所以放弃了. 后来参考了网上的一些例子. 这篇:http://www.open-open.com/lib/view/open1343744786602.html 还算可以  在适配器中把view放入map中. 算是解决了一般的问题. 至于加入之后就可以看下面 check_goods_all和delete中的代码吧 这两个函数的最后都重新设置了适配器 因为我在调用cartAdapter.notifyDataSetC

Android编程之listView中checkbox用法实例分析_Android

本文实例讲述了Android编程之listView中checkbox用法.分享给大家供大家参考,具体如下: 我们经常会用到在listView中使用checkbox的情况.直接不回应用后会发现,ListView中的OnItemClickListener事件会和checkbox中的选择事件发生冲突,这个怎么处理呢.直接上代码. list_item.xml代码: <?xml version="1.0" encoding="utf-8"?> <Relati

Android编程之listView中checkbox用法实例分析

本文实例讲述了Android编程之listView中checkbox用法.分享给大家供大家参考,具体如下: 我们经常会用到在listView中使用checkbox的情况.直接不回应用后会发现,ListView中的OnItemClickListener事件会和checkbox中的选择事件发生冲突,这个怎么处理呢.直接上代码. list_item.xml代码: <?xml version="1.0" encoding="utf-8"?> <Relati

button 单选-android ListView中的Item有两行Button,要求实现单选效果,应该怎么做呢?

问题描述 android ListView中的Item有两行Button,要求实现单选效果,应该怎么做呢? 就是向这样的Button,在ListView的Item中,如果有两行,要能实现单选效果,应该怎么做呢?麻烦各位大神们说详细点~~ 解决方案 这个不用button,用radiobutton. 解决方案二: 我是在RadioGroup中嵌套了一个LinearLayout,这样就可以显示两行了,那么问题来了,radiogroup不能实现单选了,怎么办啊 解决方案三: 我是在RadioGroup中

checkbox-如何监听listview中CheckBox复选框并且进行实时控制

问题描述 如何监听listview中CheckBox复选框并且进行实时控制 如何监听listview中CheckBox复选框并且进行实时控制 解决方案 如果你用的是C#,listview有itemcheck事件 解决方案二: 用ItemCheck或者ItemChecked事件.区别是后者在之后发生. 解决方案三: http://blog.csdn.net/codeeer/article/details/6732040

android listview中超链接不起作用

问题描述 android listview中超链接不起作用 今天看网上listview中实现超链接,自己做了下,超链接没反应,item点击事件也没反应,去掉listview时超链接正常,这是怎么回事?附上代码. @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub webViewItem webViewItem = n

android listview中怎么通过xml控制下一步的焦点

问题描述 android listview中怎么通过xml控制下一步的焦点 如图,是用listView,怎么在xml已经可以让左边的输入框点击下一步进入右边的输入框,但右边的输入框下一步会进入下一行右边的输入框,怎么设置可以下一步进入下一行左边的输入框啊,是希望能layout.xml设置,先谢谢了 解决方案 android ListView 焦点问题 解决方案二: xml里面没法定义,需要监听事件............ 解决方案三: 需要在java里监听事件

android listview中如何将edittext内容保存

问题描述 android listview中如何将edittext内容保存 android listview中如何将edittext内容保存,用change事件时为什么我输入123,1,2,3 都有变化,我怎么才能获取最终的结果呢? 解决方案 一般来说呢,安卓里提供了SharedPreference这个类对象,所以你要想将EditText里的内容保存起来可以通过以下这种方式存储: SharedPreferences sp = getSharedPreferences("Content"

listview多任务下载-Android ListView中多任务下载是如何实现的(给点思路)

问题描述 Android ListView中多任务下载是如何实现的(给点思路) 最近在项目中有个多任务下载的功能,我把下载的类和方法全部都写好了,就是不知道多任务是如何实现的,网上有人说是写个下载管理器,还望各位大牛给说一下思路.类似于这个效果的..这个只是一个虚拟的更新进度条,没实现多任务下载 解决方案 直接使用多线程来下载不同任务,定时刷新进度.