ListView+CheckBox错乱问题

public class MyAdapter extends BaseAdapter {

	private Context mContext;
	private ArrayList<Map<String, Object>> data;
	public static HashMap<Integer, Boolean> mapisSelector;

	public MyAdapter(Context context, ArrayList<Map<String, Object>> data) {
		this.mContext = context;
		this.data = data;
		initIsCheck();
	}

	//初始化checkbox的勾选状态都是 未勾选
	void initIsCheck(){
		if(null == mapisSelector){
			mapisSelector = new HashMap<Integer, Boolean>();
			for (int i = 0; i < 50; i++) {
				mapisSelector.put(i, false);
			}
		}
	}

	@Override
	public int getCount() {
		return data.size();
	}

	@Override
	public Map<String, Object> getItem(int position) {

		return data.get(position);
	}

	@Override
	public long getItemId(int position) {

		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {

		ViewHolder viewHolder = null;
		if (convertView == null) {
			convertView = View.inflate(mContext, R.layout.custom_list_item,
					null);
			viewHolder = new ViewHolder();
			// 获取控件
			viewHolder.tvName = (TextView) convertView
					.findViewById(R.id.tv_qq_name);
			// 获取控件
			viewHolder.imgQQ = (ImageView) convertView
					.findViewById(R.id.img_qq);
			// 获取控件
			viewHolder.cbQQ = (CheckBox) convertView.findViewById(R.id.cb_qq);
			// 绑定到返回的视图里
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}
		// 赋值
		viewHolder.tvName.setText(data.get(position).get("txt").toString());
		// 赋值
		viewHolder.imgQQ.setImageResource((Integer) data.get(position).get(
				"img"));

		viewHolder.cbQQ.setChecked(mapisSelector.get(position));//设置选中状态
		viewHolder.cbQQ.setTag(position);//设置tag、position
		viewHolder.cbQQ.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Integer in = (Integer) v.getTag();//得到当前tag
				if (mapisSelector.get(in)) {
					mapisSelector.put(in, false);//改为未选中
				}else{
					mapisSelector.put(in, true);//改为选中
				}
			}
		});

//		// 赋值
//		viewHolder.cbQQ.setChecked(true);
		return convertView;
	}

	public void resetDataSource(ArrayList<Map<String, Object>> data1){

		data.addAll(data1);
		this.notifyDataSetChanged();
	}

	static class ViewHolder{
		TextView tvName;
		ImageView imgQQ;
		CheckBox cbQQ;
	}
}
public class MainActivity extends Activity {

	private ListView mListView;
	private ArrayList<String> listData;
	private ArrayAdapter<String> listAdapter;

	private ArrayList<Map<String, Object>> sAdapterData;
	private SimpleAdapter sAdapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 获取控件
		mListView = (ListView) this.findViewById(R.id.listview);
//		initListView();
		 initSadpter();
	}

	private void initListView() {

		// 1、初始化数据源
		listData = new ArrayList<String>();
		for (int i = 0; i < 50; i++) {
			listData.add("ListView测试文本,第" + (i + 1) + "项");
		}

		// 2、将数据源添加到适配器上,形成资源列表
		listAdapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, listData);

		// 3、将适配器资源列表添加到适配器控件上
		mListView.setAdapter(listAdapter);
	}

	private void initSadpter() {

		// 1、初始化数据源
		sAdapterData = new ArrayList<Map<String, Object>>();
		Map<String, Object> map = null;
		for (int i = 0; i < 50; i++) {
			map = new HashMap<String, Object>();
			if (i % 2 == 0) {
				map.put("img", R.drawable.qq);
			} else {
				map.put("img", R.drawable.qq_kong);
			}
			map.put("txt", "小黑");
			map.put("cb", " ");
			sAdapterData.add(map);
		}
		String[] from = { "img", "txt", "cb" };
		int[] to = { R.id.img_qq, R.id.tv_qq_name, R.id.cb_qq };
		// 2、将数据源添加到适配器上,形成资源列表
		sAdapter = new SimpleAdapter(this, sAdapterData, R.layout.simple_main,
				from, to);
		// 3、将适配器资源列表添加到适配器控件上
		mListView.setAdapter(sAdapter);

		// 点击Items时执行的监听器
		mListView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				Map<String, Object> mapxx=(Map<String, Object>) sAdapter.getItem(position);
				String name=mapxx.get("txt").toString();

				Log.e("", "------onItemClick--------");
				startActivity(new Intent(MainActivity.this, CustomAdapterActivity.class));
			}
		});

		// 长按Item时执行
		mListView.setOnItemLongClickListener(new OnItemLongClickListener() {

			@Override
			public boolean onItemLongClick(AdapterView<?> parent, View view,
					int position, long id) {
				Log.e("", "------onItemLongClick--------");
				startActivity(new Intent(MainActivity.this, CustomAdapterActivity.class));

				return false;
			}
		});
	}
}
public class CustomAdapterActivity extends Activity {

	private ListView mListView;
	private ArrayList<Map<String, Object>> sAdapterData;
	private MyAdapter myAdapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.custom_main);
		// 获取控件
		mListView = (ListView) this.findViewById(R.id.mylist);

		initDataSource();
		initAdapter();

	}

	/**
	 * 1、初始化数据源
	 */
	private void initDataSource() {

		sAdapterData = new ArrayList<Map<String, Object>>();

		Map<String, Object> map = null;
		for (int i = 0; i < 50; i++) {
			map = new HashMap<String, Object>();
			if (i % 2 == 0) {
				map.put("img", R.drawable.qq);
			} else {
				map.put("img", R.drawable.qq_kong);
			}
			map.put("txt", "小黑");
			map.put("cb", " ");
			sAdapterData.add(map);
		}
	}

	private void initAdapter() {
		myAdapter = new MyAdapter(CustomAdapterActivity.this, sAdapterData);
		mListView.setAdapter(myAdapter);
		mListView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				myAdapter.getItem(position);
			}
		});
	}

}
时间: 2024-11-03 15:34:20

ListView+CheckBox错乱问题的相关文章

C# listview checkbox 换行

问题描述 C# listview checkbox 换行 在C#设计中,在listview中添加checkbox,每个checkbox的长度太长,怎么让文字可以换行啊? 各位大神.求助啊 解决方案 用datagridview代替listview,支持单元格自动换行,只要你把单元格高度设置大一些. 解决方案二: C#中ListView(CheckBox)一用法c# 带checkbox的listview用例C# 注释换行---------------------- 解决方案三: 添加CSS属性 给每

Android中ListView + CheckBox实现单选、多选效果

还是先来看看是不是你想要的效果: 不废话,直接上代码,很简单,代码里都有注释 1 单选 public class SingleActivity extends AppCompatActivity { private ListView listView; private ArrayList<String> groups; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInsta

ListView+CheckBox实现全选 单击效果

在网上也找了一些案例,但都是用Map来实现的.我的是把对象绑定到当前控件上.代码稍微简洁. main布局文件:main.xml <?xml version="1.0" encoding="utf-8"?>   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:layout_width="fil

Android中ListView数据显示错乱问题

问题描述 @OverridepublicViewgetView(intposition,ViewconvertView,ViewGroupparent){if(convertView==null){convertView=inflater.inflate(resource,null);//*****************我认为是这句话的问题*****************//如果改成LayoutInflater.from(context).inflate(resource,null);就是对

Android ListView滑动过程中图片显示重复错乱闪烁的原因及解决方法

主要分析Android ListView滚动过程中图片显示重复.错乱.闪烁的原因及解决方法,顺带提及ListView的缓存机制. 1.原因分析 ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View).ListView通过adapter的getView函数获得每行的item.滑动过程中, a. 如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存: b. 获取滑入屏幕的行item之前会先判断缓存中是否有可用的ite

Android checkbox的listView具体操作方法_Android

本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相应的操作.通过一个Demo来展示该功能,选中ListView中的某一项,然后点击Button按钮来显示选中了哪些项.1.程序结构图如下: 其中Person.java是实体类,MainActivity.java是Activity组件类.listitem.xml是自定义的列表每项布局文件.2.listitem.xml布局文件源码如下: <?xml version

CheckBox和ListView的结合使用

从一个菜BBBBB到一个菜鸡JJJJJJJ 也已经做安卓算是大半年了,虽然都是后期更新的一系列东西,但自己还是没有放弃停滞不前!最近开始有时间就上一些东西,大多数都是改写别人的东西,反正对于多数Coder来说解决需求才是第一位的,哈哈...也为自己的成长值做一些记录啦.! 亟亟–走向大牛之路开始!! 今天上的是一个ListView和CheckBox相结合的一个界面,资源来源于EOE一个小伙伴的素材. 废话不多,开始上代码! public class MainActivity extends Ac

Android Listview 滑动过程中提示图片重复错乱的原因及解决方法_Android

主要分析Android中Listview滚动过程造成的图片显示重复.错乱.闪烁的原因及解决方法,顺便跟进Listview的缓存机制. 1.原因分析 Listview item 缓存机制:为了使得性能更优,Listview会缓存行item(某行对应的view).listview通过adapter的getview函数获得每行的item.滑动过程中, a.如果某行item已经划出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存: b.获取滑入屏幕的行item之前会先判断缓存中是否有可用的it

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

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