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 onTouch()与onTouchEvent()的区别
  2. android flash 遮挡问题
  3. Android常用屏幕适配方式
  4. Android(安卓)如何获取keyboard和TP消息 分享
  5. 最全的PHP开发Android应用程序
  6. 利用HTML5开发Android
  7. Android——textView
  8. unity与Android相互调用
  9. android WebView总结

随机推荐

  1. Android(安卓)NDK带来什么
  2. Android布局文件的属性值解析
  3. 模仿android新浪微博手机客户端项目
  4. 自定义android的tab样式
  5. 【整理】Android中的USB中的UsbAccessory
  6. 自定义Toast
  7. Android(安卓)游戏引擎分类汇总
  8. android中数据存储及对xml的解析
  9. Android(安卓)屏幕分辩率相关问题
  10. Android开发资源 汇总