我试图通过单击按钮检查自定义适配器的所有复选框。但是当我实施
时ArrayList<BazarItems> objects
public void allChecked(){
for (int i=0; i<objects.size(); i++){
cbBuy.setChecked(true);
}
}
选中唯一的最后一项。 我做错了什么?
试过这个
`public void checkAll () {
for (int i=0; i<objects.size(); i++){
BazarItems b = objects.get(i);
b.box = true;
cbBuy.setChecked(b.box);
}
}
`
我们走了。我可能在定制适配器上遗漏了一些东西。在我的理解中,我所拥有的应该足以完成任务。
`public class BazarListAdapter extends BaseAdapter {
Context ctx;
LayoutInflater lInflater;
ArrayList<BazarItems> objects;
CheckBox cbBuy;
BazarListAdapter(Context context, ArrayList<BazarItems> products) {
ctx = context;
objects = products;
lInflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return objects.size();
}
public Object getItem(int position) {
return objects.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = lInflater.inflate(R.layout.activity_bazar_list_child_item,
parent, false);
}
BazarItems i = getItems(position);
((TextView) view.findViewById(R.id.tvDescription)).setText(i.name);
((TextView) view.findViewById(R.id.tvQuantity))
.setText(i.quantity + "");
((TextView) view.findViewById(R.id.tvPrice)).setText(i.price + "");
cbBuy = (CheckBox) view.findViewById(R.id.checkBox);
cbBuy.setOnCheckedChangeListener(myCheckChangList);
cbBuy.setTag(position);
cbBuy.setChecked(i.box);
return view;
}
BazarItems getItems(int position) {
return ((BazarItems) getItem(position));
}
ArrayList<BazarItems> getBox() {
ArrayList<BazarItems> box = new ArrayList<BazarItems>();
for (BazarItems i : objects) {
if (i.box)
box.add(i);
}
return box;
}
OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
getItems((Integer) buttonView.getTag()).box = isChecked;
}
};
`
答案 0 :(得分:2)
在您的CustomAdapter
boolean isAllCHecked=false;
和此类的setter方法
public setAllChecked()
{
isAllCHecked=true;
notifyDataSetChanged();
}
并在您getView
的{{1}}内做了类似这样的事情
CustomAdapter
答案 1 :(得分:0)
你总是在同一个对象上调用setChecked()。
尝试:
for (int i=0; i<objects.size(); i++){
objects.get(i).box = true;
}
然后invalidate();
你的ListView。