Android开发ListView中包含CheckBox(点击item选中CheckBox),并设置其全选反选等功能
来源:互联网 发布:孚盟软件知乎 编辑:程序博客网 时间:2024/05/16 06:52
要实现ListView中CheckBox的选中并记录,我的做法是自己写一个Adapter,继承于BaseAdapter,ListView中的CheckBox需要将focusable,clickable的属性都设置为false,防止CheckBox将点击事件拦截,在ListView的onItemClick方法中接收点击事件并对数据进行处理。废话不多说,上代码。
先给大家看一下listview中数据的xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" /><CheckBox android:id="@+id/cb" android:layout_height="wrap_content" android:layout_width="wrap_content" android:focusable="false" android:clickable="false" android:layout_alignParentRight="true" /></RelativeLayout>
然后再看main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/lv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#00000000" android:listSelector="#00000000" android:scrollbars="none" android:fadingEdge="none" /></LinearLayout>
最后把主代码给大家
package com.zk.listview;import java.util.ArrayList;import java.util.HashMap;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class CheckBoxInlistViewActivity extends Activity implements OnItemClickListener { public static final String CHECK = "checkbox"; public static final String NAME = "name"; private ListView mListView; private MyAdapter mAdapter; private ArrayList<HashMap<String, Object>> mData; private Boolean mCheckable = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); initData(); } private void initView() { setContentView(R.layout.main); mListView = (ListView) findViewById(R.id.lv); mListView.setOnItemClickListener(this); } private void initData() { mData = new ArrayList<HashMap<String,Object>>(); for (int i = 0; i < 10; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put(NAME, "name " + i); map.put(CHECK, mCheckable); mData.add(map); } mAdapter = new MyAdapter(getApplicationContext(), mData); mListView.setAdapter(mAdapter); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { HashMap<String, Object> item = mData.get(position); String name = (String) item.get(NAME); Boolean isChecked = (Boolean) item.get(CHECK); item.put(CHECK, !isChecked); if (!isChecked) { Toast.makeText(getApplicationContext(), name + " 被选中!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), name + " 被取消!", Toast.LENGTH_SHORT).show(); } mAdapter.notifyDataSetChanged(); } class MyAdapter extends BaseAdapter { private ArrayList<HashMap<String, Object>> mDataSource; private Context mContext; public MyAdapter(Context context, ArrayList<HashMap<String, Object>> list) { this.mContext = context; this.mDataSource = list; } @Override public int getCount() { if (mDataSource == null) { return 0; } return mDataSource.size(); } @Override public Object getItem(int position) { if (mDataSource == null) { return new HashMap<String, Object>(); } return mDataSource.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; if (convertView == null) { view = newView(position, parent); } else { view = convertView; } bindView(view,position); return view; } private View newView(int position, ViewGroup parent) { View view = null; LayoutInflater mInflater = LayoutInflater.from(mContext); ViewHolder mViewHolder = new ViewHolder(); view = mInflater.inflate(R.layout.item, parent, false); mViewHolder.textView = (TextView) view.findViewById(R.id.tv); mViewHolder.checkBox = (CheckBox) view.findViewById(R.id.cb); view.setTag(mViewHolder); return view; } private void bindView(View view, int position) { HashMap<String, Object> data = mDataSource.get(position); String str = (String) data.get(NAME); Boolean tag = (Boolean) data.get(CHECK); ViewHolder mViewHolder = (ViewHolder) view.getTag(); mViewHolder.textView.setText(str); mViewHolder.checkBox.setChecked(tag); } class ViewHolder { public TextView textView; public CheckBox checkBox; } }}
如有不合适的地方,希望大家指正,一起进步
- Android开发ListView中包含CheckBox(点击item选中CheckBox),并设置其全选反选等功能
- Android中ListView中有Checkbox时,想获得item的position,以及全选,反选
- checkbox全选、反选功能
- android ListView中Checkbox实现单选,全选,全不选功能
- ListVIew点击事件失效(item中包含checkbox)
- Android开发CheckBox控件,全选,反选,取消全选
- DeveXpress ASPxGridView实现checkbox全选反选(自带的ShowSelectCheckBOx)并获取选中checkbox对应的值集合
- Android ListView长按弹出CheckBox,实现全选,反选,批量删除功能
- 如何实现listView中checkbox的全选与反选功能
- jqeury checkbox全选/反选 ,子选项全选,全选选中
- Listview嵌套CheckBOX 实现全选反选取消,并对选中项进行标记
- 实现listview中checkbox的全选、反选和取消
- ListView+CheckBox实现全选和反选
- ListView中的CheckBox全选反选
- ListView + CheckBox (全选,反选,取消)
- ListView和CheckBox嵌套,全选,反选
- listView进行CheckBox的全选、反选
- Android CheckBox实现多选、全选、反选功能
- BREW PEK步骤
- linux下setfattr命令出错:setfattr: file0: Operation not supported
- linux和发展与应用
- 安装zeromq-2.2.0
- ASP.NET AJAX客户端生命周期分析
- Android开发ListView中包含CheckBox(点击item选中CheckBox),并设置其全选反选等功能
- 在命令提示符窗口下访问sql server数据库
- 网站性能优化:JS篇
- hdu2586[lca离线tarjon算法][递归与非递归]
- Window XP驱动开发(二十四) 电源管理
- linux安装(CentOS)
- linux 命令格式
- Spring MVC 的请求参数获取
- .net中RSA的加密与解密