listview check
16lz
2021-01-26
import java.util.ArrayList;import java.util.HashMap;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.TextView;public class MyAdapter extends BaseAdapter {private ArrayList list;// 用来控制CheckBox的选中状况private static HashMap isSelected;private Context context;private LayoutInflater inflater = null;// 构造器public MyAdapter(ArrayList list, Context context) {this.context = context;this.list = list;inflater = LayoutInflater.from(context);isSelected = new HashMap();// 初始化数据initDate();}// 初始化isSelected的数据private void initDate() {for (int i = 0; i < list.size(); i++) {getIsSelected().put(i, false);}}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {holder = new ViewHolder();convertView = inflater.inflate(R.layout.item, null);holder.tv = (TextView) convertView.findViewById(R.id.item_tv);holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}// 设置list中TextView的显示holder.tv.setText(list.get(position));// 根据isSelected来设置checkbox的选中状况holder.cb.setChecked(getIsSelected().get(position));return convertView;}public static HashMap getIsSelected() {return isSelected;}public static void setIsSelected(HashMap isSelected) {MyAdapter.isSelected = isSelected;}}
import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Set;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.ListView;import android.widget.TextView;public class MainAct extends Activity {private ListView lv;private MyAdapter mAdapter;private ArrayList list;private Button bt_selectall;private Button bt_cancel;private Button bt_deselectall;private int checkNum; // 记录选中的条目数量private TextView tv_show;// 用于显示选中的条目数量private TextView header;Set headerList = null;HashMap map = new HashMap();/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);lv = (ListView) findViewById(R.id.lv);bt_selectall = (Button) findViewById(R.id.bt_selectall);bt_cancel = (Button) findViewById(R.id.bt_cancelselectall);bt_deselectall = (Button) findViewById(R.id.bt_deselectall);tv_show = (TextView) findViewById(R.id.tv);header = (TextView) findViewById(R.id.header);list = new ArrayList();// 为Adapter准备数据initDate();// 实例化自定义的MyAdaptermAdapter = new MyAdapter(list, this);// 绑定Adapterlv.setAdapter(mAdapter);// 全选按钮的回调接口bt_selectall.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 遍历list的长度,将MyAdapter中的map值全部设为truefor (int i = 0; i < list.size(); i++) {MyAdapter.getIsSelected().put(i, true);}// 数量设为list的长度checkNum = list.size();// 刷新listview和TextView的显示dataChanged();}});// 取消按钮的回调接口bt_cancel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 遍历list的长度,将已选的按钮设为未选for (int i = 0; i < list.size(); i++) {if (MyAdapter.getIsSelected().get(i)) {MyAdapter.getIsSelected().put(i, false);checkNum--;// 数量减1}}// 刷新listview和TextView的显示dataChanged();}});// 反选按钮的回调接口bt_deselectall.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 遍历list的长度,将已选的设为未选,未选的设为已选for (int i = 0; i < list.size(); i++) {if (MyAdapter.getIsSelected().get(i)) {MyAdapter.getIsSelected().put(i, false);checkNum--;} else {MyAdapter.getIsSelected().put(i, true);checkNum++;}}// 刷新listview和TextView的显示dataChanged();}});// 绑定listView的监听器lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤ViewHolder holder = (ViewHolder) arg1.getTag();// 改变CheckBox的状态holder.cb.toggle();// 将CheckBox的选中状况记录下来MyAdapter.getIsSelected().put(arg2, holder.cb.isChecked());// 调整选定条目if (holder.cb.isChecked() == true) {checkNum++; map.put(arg2, holder.tv.getText().toString());} else {checkNum--;map.remove(arg2);}headerList = map.keySet();for(Iterator it = headerList.iterator(); it.hasNext();){int ii = it.next();Log.i("main", "---" + map.size() + ", " + ii + ", " + map.get(ii));}// 用TextView显示tv_show.setText("已选中" + checkNum + "项");}});}// 初始化数据private void initDate() {for (int i = 0; i < 15; i++) {list.add("data" + " " + i);}}// 刷新listview和TextView的显示private void dataChanged() {// 通知listView刷新mAdapter.notifyDataSetChanged();// TextView显示最新的选中数目tv_show.setText("已选中" + checkNum + "项");}}
更多相关文章
- 单选按钮和复选框
- Android(安卓)淘宝购物车细节详情
- Android(安卓)到底什么是Dialog?
- Android(安卓)自定义DialogProgress
- android app全屏显示
- 关于NotificationManager.notify 异常解决
- android 进度条学习
- 以Dialog方式显示activity
- Android控件显示与隐藏