android中多个CheckBox(已超过整个屏幕)全选和反选问题 android中ListView下多个CheckBox全选问题,如果CheckBox的个数超过一屏,则会出现部分被选中,部分未被选中的问题,请问高手如何解决? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在一个group里面也会出这个问题? checkbox的多少是根据数据库中数据的记录多少来自动生成的。在不重写Adapter的情况下是否可以解决这个问题? 还没有遇到全屏CheckBox的 完了试试看 把你的全选反选的代码贴上来看看吧主要是看Adapter里怎么处理最笨的办法:用ListView实例的方法去找到子的checkbox实例,然后挨个置上,应该没问题的 需要自定义ListView的MyAdapter/* * 自定义ListView的MyAdapter */ public final class ViewHolder { public TextView iid; public EditText info; public CheckBox cbx; public ImageView img; } Set<Object> selectedSet = new HashSet<Object>(); //重点 public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; public MyAdapter(Context context) { this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return mData.get(position); } @Override public long getItemId(int arg0) { return arg0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.list, null); holder.iid = (TextView) convertView.findViewById(R.id.iid); holder.info = (EditText) convertView.findViewById(R.id.info); holder.cbx = (CheckBox) convertView.findViewById(R.id.cbx); holder.img = (ImageView) convertView.findViewById(R.id.img); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.iid.setText(String.valueOf(mData.get(position).get("iid"))); holder.info.setText((String) mData.get(position).get("info")); int resid = (Integer) mData.get(position).get("img"); if (resid != 0) holder.img.setBackgroundResource(resid); holder.info.setText(mData.get(position).toString()); //重点开始 Object b = (Object) getItem(position); if (b != null) { if (selectedSet.contains(b)) { holder.cbx.setChecked(true); } else { holder.cbx.setChecked(false); } } holder.cbx.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CheckBox cb = (CheckBox) v; if (cb.isChecked()) { selectedSet.add((Object) getItem(position)); } else { selectedSet.remove((Object) getItem(position)); } } }); //重点结束 holder.info.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { } }); return convertView; } @Override public void notifyDataSetChanged() { // TODO Auto-generated method stub super.notifyDataSetChanged(); } }不懂的可以问我 我知道重写Adapter,我也实现了功能。只有这种解决方法吗? http://download.csdn.net/source/3120614这就是你要的 下面是我以前看的一个例子,这个应该能解决你的问题吧:package com.listViewTest;import java.util.ArrayList;import java.util.List;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.BaseAdapter;import android.widget.CheckBox;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;public class ListViewTest extends ListActivity { /** Called when the activity is first created. */ Context context = null; List<Integer> list = new ArrayList<Integer>(); CheckBox checkbox; private LinearLayout lr; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); context = getApplicationContext(); setListAdapter(new MyListAdapter()); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { // TODO Auto-generated method stub super.onListItemClick(l, v, position, id); lr = (LinearLayout) v; checkbox = (CheckBox) lr.getChildAt(1); if (list.contains(new Integer(position))) { checkbox.setChecked(false); list.remove(new Integer(position)); }else { checkbox.setChecked(true); list.add(new Integer(position)); } } class MyListAdapter extends BaseAdapter{ String data[] = new String[]{"apple", "pear", "banana", "orange","apple", "pear", "banana", "orange","apple", "pear", "banana", "orange"}; public int getCount() { // TODO Auto-generated method stub return data.length; } public Object getItem(int position) { // TODO Auto-generated method stub return data[position]; } public long getItemId(int position) { // TODO Auto-generated method stub return position; } public View getView(int position, View convertView, ViewGroup parent) { if (null == convertView){ LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.list_item, parent, false); } TextView text = (TextView)convertView.findViewById(R.id.info); checkbox = (CheckBox)convertView.findViewById(R.id.checkstatus); checkbox.setTag(new Integer(position)); text.setText(data[position]); if (list != null) { checkbox.setChecked((list.contains(new Integer(position)))); } else { checkbox.setChecked(false); } return convertView; } } } 如何在Android源码层修改焦点边框的默认显示颜色 如何学习JIN 关于android推送 android 下操作数据库 求教Android作服务器,TCP通信的问题 自定义对话框,不需要标题栏,对话框顶部会多出一部分黑色区域,请问如何干掉这部分多余的区域 什么是CDMA 和GSM Android新手,hello world就是跑不出来,请帮忙看下怎么回事 软键盘显示时,EditText看不见了 请教:eclipse的android的SDK如何从4.3升级到4.4 用Eclipse进行android开发如何在代码中实现预处理? 装了JDK-SDK-Eclipse后提示
主要是看Adapter里怎么处理最笨的办法:用ListView实例的方法去找到子的checkbox实例,然后挨个置上,应该没问题的
* 自定义ListView的MyAdapter
*/
public final class ViewHolder {
public TextView iid;
public EditText info;
public CheckBox cbx;
public ImageView img; } Set<Object> selectedSet = new HashSet<Object>(); //重点 public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; public MyAdapter(Context context) {
this.mInflater = LayoutInflater.from(context);
} @Override
public int getCount() {
return mData.size();
} @Override
public Object getItem(int position) {
return mData.get(position);
} @Override
public long getItemId(int arg0) {
return arg0;
} @Override
public View getView(final int position, View convertView,
ViewGroup parent) { ViewHolder holder = null;
if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.list, null);
holder.iid = (TextView) convertView.findViewById(R.id.iid);
holder.info = (EditText) convertView.findViewById(R.id.info); holder.cbx = (CheckBox) convertView.findViewById(R.id.cbx); holder.img = (ImageView) convertView.findViewById(R.id.img);
convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag();
} holder.iid.setText(String.valueOf(mData.get(position).get("iid")));
holder.info.setText((String) mData.get(position).get("info")); int resid = (Integer) mData.get(position).get("img");
if (resid != 0)
holder.img.setBackgroundResource(resid); holder.info.setText(mData.get(position).toString()); //重点开始
Object b = (Object) getItem(position);
if (b != null) {
if (selectedSet.contains(b)) {
holder.cbx.setChecked(true);
} else {
holder.cbx.setChecked(false);
} }
holder.cbx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
if (cb.isChecked()) {
selectedSet.add((Object) getItem(position));
} else {
selectedSet.remove((Object) getItem(position));
}
}
});
//重点结束
holder.info.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
}
}); return convertView;
} @Override
public void notifyDataSetChanged() {
// TODO Auto-generated method stub
super.notifyDataSetChanged();
}
}不懂的可以问我
package com.listViewTest;import java.util.ArrayList;
import java.util.List;
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.BaseAdapter;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;public class ListViewTest extends ListActivity {
/** Called when the activity is first created. */
Context context = null;
List<Integer> list = new ArrayList<Integer>();
CheckBox checkbox;
private LinearLayout lr;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = getApplicationContext();
setListAdapter(new MyListAdapter());
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
lr = (LinearLayout) v;
checkbox = (CheckBox) lr.getChildAt(1);
if (list.contains(new Integer(position))) {
checkbox.setChecked(false);
list.remove(new Integer(position));
}else {
checkbox.setChecked(true);
list.add(new Integer(position));
}
}
class MyListAdapter extends BaseAdapter{
String data[] = new String[]{"apple", "pear", "banana", "orange","apple", "pear", "banana", "orange","apple", "pear", "banana", "orange"};
public int getCount() {
// TODO Auto-generated method stub
return data.length;
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return data[position];
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (null == convertView){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item, parent, false);
}
TextView text = (TextView)convertView.findViewById(R.id.info);
checkbox = (CheckBox)convertView.findViewById(R.id.checkstatus);
checkbox.setTag(new Integer(position));
text.setText(data[position]);
if (list != null) {
checkbox.setChecked((list.contains(new Integer(position))));
} else {
checkbox.setChecked(false);
}
return convertView;
}
}
}