0
你好我已經用我的自定義適配器創建了一個List。每一行都有複選框,textView,textView。在我的適配器中,我使用了ovcked方法onCheckedChanged。當我將Toast檢查每個點擊項目的狀態時,它應該像它應該那樣工作,但是當我想在主要活動中刪除所選項目時,它總是刪除我最後一個元素。有人可以給我一個小費嗎?這裏是我的適配器代碼CheckBox onCheckedChanged無法正常工作
public View getView(final int position, final View convertView, ViewGroup parent) {
View row = convertView;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(resource, parent, false);
holder = new RowBeanHolder();
holder.txtTitle=(TextView) row.findViewById(R.id.name);
holder.indicator=(TextView) row.findViewById(R.id.indicator);
holder.checkBox=(CheckBox) row.findViewById(R.id.checkBoxDelete);
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
ProductList element=(ProductList) holder.checkBox.getTag();
element.setSelected(isChecked);
//Toast.makeText(context,element.getSelected(),Toast.LENGTH_SHORT).show(); it show my current state
}
});
row.setTag(holder);
holder.checkBox.setTag(data.get(position));
}
else
{
holder = (RowBeanHolder)row.getTag();
((RowBeanHolder) row.getTag()).checkBox.setTag(data.get(position));
}
if(longPressed){
showCheckbox();
}
else{
hideCheckbox();
uncheck();
}
ProductList object = data.get(position);
holder.txtTitle.setText(object.getName());
holder.indicator.setText(object.getToBuy() + "/" + object.getBought());
holder.checkBox.setChecked(data.get(position).isSelected());
return row;
}
,並以這種方式我刪除操作
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()){
case R.id.action_delete:
for(ProductList p:items){
if(p.isSelected()) items.remove(p);
}
mode.finish();
return true;
default: return false;
}
}
我通過數據
adapter = new RowAdapter(context,R.layout.row,items);
listView.setAdapter(adapter);
buttonView。 getTag();當我想要更改爲int時返回Object:(int)buttonView.getTag();應用停止工作 –
也許它是空的。你是否爲這兩種情況設置了標籤? – Krish
是,如果row == null holder.checkBox.setTag(position); ((RowBeanHolder)row.getTag())。checkBox.setTag(position); –