你好,我用我的自定义适配器创建了一个列表。每一行都有复选框、textView、textView。在我的适配器中,我已经创建了方法onCheckedChanged。当我让Toast检查每个单击项的状态时,它的工作原理是正常的,但是当我想要在主活动中删除选定的项目时,它总是只删除我的最后一个元素。有人能给我小费吗?这是我的适配器代码
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);发布于 2017-05-08 21:23:11
像这样改变逻辑,
public View getView(final int position, final View convertView, ViewGroup parent) {
View row = convertView;
RowBeanHolder holder;
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) {
int itemPos = buttonView.getTag();
ProductList element = data.get(itemPos);
element.setSelected(isChecked);
//Toast.makeText(context,element.getSelected(),Toast.LENGTH_SHORT).show(); it show my current state
}
});
row.setTag(holder);
holder.checkBox.setTag(position);
}
else
{
holder = (RowBeanHolder)row.getTag();
((RowBeanHolder) row.getTag()).checkBox.setTag(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;
}https://stackoverflow.com/questions/43857145
复制相似问题