[英]How to handle multiple checkbox in listview
我有一個包含復選框,文本的列表視圖...
我的問題與復選框有關,我有一個來自本地數據庫的對象(模型)列表,我的模型中有一個布爾值,它告訴我是否需要在復選框中進行檢查。我建立列表視圖的時刻。 我的問題是從我選中一個框的那一刻起,下一次我進入該視圖時,所有復選框都會被選中,或者未選中...
我首先想到我的模型列表有問題,但是它們都是正確的...我不知道為什么...
這是適配器的getView方法:
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder allItems = null;
if (convertView == null)
{
allItems = new ViewHolder();
convertView = mInflater.inflate(R.layout.row, null);
allItems.delete = (ImageButton) convertView.findViewById(R.id.deleteItem);
allItems.chkTick = (CheckBox) convertView.findViewById(R.id.checkBox1);
allItems.txtName = (TextView) convertView.findViewById(R.id.nameItem);
allItems.price = (TextView) convertView.findViewById(R.id.priceItem);
allItems.numberItem = (TextView) convertView.findViewById(R.id.numberItem);
allItems.plus = (ImageButton) convertView.findViewById(R.id.plusItem);
allItems.minus = (ImageButton) convertView.findViewById(R.id.minusItem);
convertView.setTag(allItems);
}
else
allItems = (ViewHolder) convertView.getTag();
final int pos = position;
allItems.txtName.setText(this._sqlHelper.getItemById(items.get(position).getItemId()).getName());
allItems.numberItem.setText(Integer.toString(items.get(position).getQuantity()));
allItems.chkTick.setChecked(items.get(position).getIsChecked());
if (tmp != null && tmp.compareTo("TRUE") == 0)
{
allItems.price.setVisibility(View.VISIBLE);
allItems.price.setText("(" + Double.toString(items.get(position).getPrice()) + "€)");
}
else
allItems.price.setVisibility(View.INVISIBLE);
allItems.chkTick.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
items.get(pos).setIsChecked(isChecked);
getPos(buttonView);
if (isChecked)
{
if (tmp != null && tmp.compareTo("TRUE") == 0)
ShowPopup(activity, p, pos);
}
_sqlHelper.updateShoppingListItem(items.get(pos));
}
});
allItems.delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(ListItemsAdaptor.this.activity);
builder.setCancelable(false);
builder.setTitle("Delete Item");
builder.setMessage("Are you sure you want to delete this item ?");
builder.setPositiveButton("Update", null);
builder.setNegativeButton("Cancel", null);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
_sqlHelper.deleteShoppingListItemByIdItem(items.get(pos).getListId(), items.get(pos).getItemId());
items.remove(pos);
updateResults(items);
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
builder.show();
}
});
allItems.plus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
items.get(pos).setQuantity(items.get(pos).getQuantity()+ 1);
updateResults(items);
_sqlHelper.updateShoppingListItem(items.get(pos));
}
});
allItems.minus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (items.get(pos).getQuantity() > 1){
items.get(pos).setQuantity(items.get(pos).getQuantity()- 1);
updateResults(items);
_sqlHelper.updateShoppingListItem(items.get(pos));
}
}
});
return (convertView);
}
謝謝你們的幫助!
我建議您使用私有ListArray的checkedItems並在選中的項中添加或刪除,畢竟在代碼之后傳遞或使用此列表Array。
我認為您需要在onCheckedChangeListener中(以及每次更改項目之后notifyDataSetChanged()
調用適配器的notifyDataSetChanged()
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.