android使用CheckedTextView搭配listview完成选择列表

列表list_checktextview.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="horizontal" >    <ImageView        android:id="@+id/dianjiceshi"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/ic_launcher" />    <CheckedTextView        android:id="@+id/checktv_title"        android:layout_width="match_parent"        android:layout_height="?android:attr/listPreferredItemHeight"        android:checkMark="?android:attr/listChoiceIndicatorMultiple"        android:gravity="center_vertical"        android:paddingLeft="6dip"        android:paddingRight="6dip"        android:textAppearance="?android:attr/textAppearanceLarge" /></LinearLayout>

代码:

package com.example.myapp;import java.util.ArrayList;import java.util.HashMap;import java.util.Map.Entry;import java.util.Set;import android.app.ListActivity;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.CheckedTextView;import android.widget.ImageView;import android.widget.ListView;public class ListCheckedTextView extends ListActivity {private ArrayList<HashMap<String, String>> arrlist = new ArrayList<HashMap<String, String>>();private ListView listView;private HashMap<Integer, Boolean> checkedMap = new HashMap<Integer, Boolean>();@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getdata();/* * 设置ListView的适配器 有两种方式加载含CheckedTextView的多选模式并响应事件 1. 但是这种方式,选择多选响应事件时 * 各个Item会出现乱弹的现象,不知道为什么 希望各位大虾帮帮忙 //适配器设置 setListAdapter(new * SimpleAdapter(this, arrlist, R.layout.list_checktextview, new * String[]{"title"}, new int[]{R.id.checktv_title})); //listview的监听事件 * listView.setOnItemClickListener(new OnItemClickListener() { *  * @Override public void onItemClick(AdapterView<?> parent, View view, * int position, long id) { checktv = (CheckedTextView) * parent.getChildAt(position).findViewById(R.id.checktv_title); * if(checktv.isChecked()){ checktv.setChecked(false); }else{ * checktv.setChecked(true); } } }); 2. 通过自定义Adapter实现 如下, */setListAdapter(new MyAdapter(this, arrlist));listView = getListView();listView.setItemsCanFocus(false);listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);// listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);//单选listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {/* * 对于由position指定的项目,返回其是否被选中。 * 只有当选择模式已被设置为CHOICE_MODE_SINGLE或CHOICE_MODE_MULTIPLE时 ,结果才有效。 */boolean checked = getListView().isItemChecked(position);checkedMap.put(position, checked);getListView().setItemChecked(position, checked);}});}// 构造数据private ArrayList<HashMap<String, String>> getdata() {HashMap<String, String> map = new HashMap<String, String>();map.put("title", "aaaa");arrlist.add(map);map = new HashMap<String, String>();map.put("title", "bbbb");arrlist.add(map);map = new HashMap<String, String>();map.put("title", "cccc");arrlist.add(map);return arrlist;}// 自定义Adapter,从checkMap中获取当前Item的状态 并设置private class MyAdapter extends BaseAdapter {private LayoutInflater inflater;ArrayList<HashMap<String, String>> datalist;public MyAdapter(Context context,ArrayList<HashMap<String, String>> datalist) {super();inflater = LayoutInflater.from(context);this.datalist = datalist;}@Overridepublic int getCount() {return datalist.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {convertView = inflater.inflate(R.layout.list_checktextview,null);holder = new ViewHolder();holder.checktv_title = (CheckedTextView) convertView.findViewById(R.id.checktv_title);holder.imageView=(ImageView)convertView.findViewById(R.id.dianjiceshi);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.imageView.setOnClickListener(new myClickimg());holder.checktv_title.setText(datalist.get(position).get("title").toString());// 根据checkMap中position的状态设置是否被选中if (checkedMap.get(position) != null&& checkedMap.get(position) == true) {holder.checktv_title.setChecked(true);} else {holder.checktv_title.setChecked(false);}return convertView;}class ViewHolder {CheckedTextView checktv_title;ImageView imageView;}}class myClickimg implements View.OnClickListener{@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stuballNo();}}/* * 全否 * */public void allNo(){Set<Entry<Integer, Boolean>> re = checkedMap.entrySet();for (Entry<Integer, Boolean> entry : re) {Integer mkey = entry.getKey();//全部设置为falsecheckedMap.put(mkey, false);setListAdapter(new MyAdapter(getApplicationContext(), arrlist));//更新ui}}}

更多相关文章

  1. Android 设置DrawableRight和DrawableLeft 点击事件
  2. Android touch事件一种解释
  3. Android手机屏幕的三种状态
  4. Android Touch事件传递机制引发的血案
  5. Android沉浸式状态栏(二)
  6. Android(Java):Android 事件分发机制
  7. android 回车键事件编程
  8. 沉浸式状态栏StatusBar
  9. Android 事件分发机制源码

随机推荐

  1. Android自动化测试初探(四): 模拟键盘鼠标
  2. Android中欢迎界面背景图片放大效果
  3. Android(安卓)OnTouchListener OnGesture
  4. 在Ubuntu上下载、编译和安装Android最新
  5. android xml 分析1--- AndroidManifest.x
  6. Android手势检测简介
  7. Android(安卓)studio出现Error:Plugin is
  8. 【Android(安卓)应用开发】Ubuntu 下 And
  9. Android中onCreateOptionsMenu(Menu menu
  10. Android