解决安卓开发中listview与checkbox等控件一起使用的问题
来源:互联网 发布:sqlserver分页sql语句 编辑:程序博客网 时间:2024/05/16 06:07
之前做一个个人项目的时候在listview中加入了checkbox控件,但是发现选择一个checkbox之后,其余某个checkbox也会被选择,经过6个小时的努力终于解决了这个问题。
要解决这个问题我们就要了解首先安卓的listview是有缓存和复用机制的,关于这点如果不了解的话可以点击这个链接,里面有浅显易懂的解释:
http://blog.csdn.net/lovehong0306/article/details/7498025
(注意:这个链接是转载的,感谢原作者)
之所以会出现checkbox之间选择之后相互关联就是因为这个复用机制再捣乱。
所以现在我们要做的就是手动的保存下每个checkbox是否被选择的状态,当系统调用getView显示checkbox的时候通过我们自己保存下的状态来决定checkbox应该被设置选中还是未选中。在代码中我选择使用ArrayList来保存checkbox的选中状态。
下面是代码:
1.主activity
<pre name="code" class="java">package com.Dropout.Four;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.support.v7.appcompat.R.integer;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.ListView;import android.widget.SimpleAdapter;public class BuyActivity extends Activity {private Button bt_ok; private Button bt_cancel; private ListView lv; public static ArrayList<Boolean> list_bool; private MyAdapter ma; private List<Map<String,String>> list =new ArrayList<Map<String,String>>(); private SimpleAdapter sa =null; private ArrayList<Boolean> checked=new ArrayList<Boolean>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_buy);for(int i=0;i<(MainActivity.list).size();i++){checked.add(false);}//初始化list_boolilist_bool = new ArrayList<Boolean>();for (int i = 0;i<MainActivity.list.size();i++){list_bool.add(false);}bt_ok = (Button)findViewById(R.id.button1);bt_ok.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) { Intent in=new Intent(BuyActivity.this,BuyingActivity.class); BuyActivity.this.finish(); BuyActivity.this.startActivity(in); }});bt_cancel = (Button)findViewById(R.id.button2);bt_cancel.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {BuyActivity.this.finish();}});lv =(ListView)findViewById(R.id.listView1); ma = new MyAdapter(BuyActivity.this,R.layout.choose_buy,MainActivity.list); lv.setAdapter(ma); /*for (int i =0; i<MainActivity.tot_people;i++){Map<String,String> map = new HashMap<String,String>();map.put("name",MainActivity.list.get(i));list.add(map);}sa = new SimpleAdapter(this,list,R.layout.choose_buy,new String[]{"name"}, new int[]{R.id.checkBox1});lv.setAdapter(sa); */} private class MyAdapter extends ArrayAdapter<String>{private int resource; public MyAdapter(Context context,int resourceId, ArrayList<String> s) {super(context,resourceId,s);resource = resourceId; }@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if(convertView==null){convertView=BuyActivity.this.getLayoutInflater().inflate(R.layout.choose_buy, null);}CheckBox cb = (CheckBox)convertView.findViewById(R.id.checkBox1);cb.setText(MainActivity.list.get(position));cb.setChecked(checked.get(position));cb.setOnClickListener(new MyListener(position));return convertView; }private class MyListener implements OnClickListener{private int key;public MyListener(int key){this.key=key;}@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根if(!checked.get(key)){checked.set(key,true);return;}if(checked.get(key)){checked.set(key,false);return;} } } } }
</pre><pre name="code" class="java">2.定义了checkbox的布局文件:
<?xml version="1.0" encoding = "utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/myLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <CheckBox android:id="@+id/checkBox1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="0.42" android:text="CheckBox" /></LinearLayout>
3.主Activity的布局文件:
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/AbsoluteLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.Dropout.Four.BuyActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_x="13dp" android:layout_y="12dp" android:text="请选择参与本次消费的成员:" /> <ListView android:id="@+id/listView1" android:layout_width="223dp" android:layout_height="312dp" android:layout_x="29dp" android:layout_y="38dp" > </ListView> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_x="53dp" android:layout_y="378dp" android:text="确定" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_x="168dp" android:layout_y="378dp" android:text="返回" /></AbsoluteLayout>
0 0
- 解决安卓开发中listview与checkbox等控件一起使用的问题
- Android ListView中使用CheckBox等的混乱问题
- 安卓开发之三-——如何解决在listview中适配checkbox,出现多个条目选中的问题
- android开发中ListView与CheckBox的混合使用
- ScrollView和ListView一起使用 文本换行getMeasuredHeight等问题的解决
- checkbox 与 listview 等混用焦点问题
- ListView中CheckBox使用问题
- 安卓Android开发:listView+checkbox的简单实现
- 安卓ListView中CheckBox的使用(支持Item列表项的删除,全选,全不选)
- 安卓ListView中CheckBox的使用(支持Item列表项的删除,全选,全不选)
- ListView的item中有button ImageButton CheckBox EditText等时 点击事件失效问题的解决
- ListView的item中有button ImageButton CheckBox EditText等时 点击事件失效问题的解决
- 解决 listview 中添加 checkbox 出现的问题
- ListView中怎么解决CheckBox复用的问题
- Android ListView中怎么解决CheckBox复用的问题
- 解决listview中checkbox复用的问题
- ListView中解决因CheckBox导致的焦点问题
- GridView/ListView的item中使用CheckBox的问题
- 数据类型
- 一个实际项目Java架构设计之总体设计
- 中国通史
- java学习笔记2015-6-7
- Spring如何处理线程并发
- 解决安卓开发中listview与checkbox等控件一起使用的问题
- char,TCHAR,WCHAR区别
- C++ Primer学习3:枚举类型
- Uva - 1594 - Ducci Sequence
- 2015061203 - 如果感觉现在的工作很无聊会怎么办?
- log4Cpp学习(本文转载)
- gdb常用命令
- linux内存源码分析 - SLAB分配器概述
- BMP格式知识之四:BMP文件详解