多选模式列表视图行在删除后保持选中状态

Posted

技术标签:

【中文标题】多选模式列表视图行在删除后保持选中状态【英文标题】:Multi choice mode listview row remains checked after deletion 【发布时间】:2016-01-30 19:40:52 【问题描述】:

我有一个使用DragSortListView 库创建的列表视图。我能够检查和取消使用自定义基本适配器创建的行。我在我的片段代码中使用 getCheckedItemPositions() 获得检查的位置。

问题是当我删除一个被选中的特定行并添加一个新行时,会自动检查该新行。我希望该行在被删除时取消选中

这是我在 getView() 中所做的,但它不起作用。

holder.clearItem.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            items.remove(position);
            updateNoteAdapter(items);
            holder.container.setChecked(false); //row needs to be unchecked
        
    );

items 是列表行中显示的项目的arraylist。

holder.container 是实现 Checkable 的 OneLineCheckableListItem 类。

public class OneLineCheckableListItem extends RelativeLayout implements Checkable

public OneLineCheckableListItem(Context context, AttributeSet attrs)
    super(context, attrs);


private boolean checked;

@Override
public void setChecked(boolean checked) 
    this.checked = checked;

    ImageView iv = (ImageView) findViewById(R.id.SelectImageView);
    iv.setImageResource(checked ? R.drawable.ic_toggle_check_box : R.drawable.ic_toggle_check_box_outline_blank);



@Override
public boolean isChecked() 
    return checked;


@Override
public void toggle() 
    this.checked = !this.checked;

这里有什么我错过的吗?任何帮助表示赞赏。谢谢。

【问题讨论】:

添加 notifyDataSetChanged();在 holder.container.setChecked(false); notifyDataSetChanged();在 updateNoteAdapter(items); 内部调用; 【参考方案1】:

我在下面找到了这个解决方案。

setChecked() 不检查项目,我们必须在 ListView 上使用 setItemChecked()。

要检查 CHOICE_MODE_MULTIPLE 中的项目,您无需调用 CheckedTextView 上的 setChecked()。调用 setItemChecked() 列表视图。

https://groups.google.com/forum/#!searchin/android-developers/choice_mode_multiple$20listview$20/android-developers/qPgt23C2-0o/Xdjs9ARPLGcJ

还有这个

Call Activity method from adapter

【讨论】:

以上是关于多选模式列表视图行在删除后保持选中状态的主要内容,如果未能解决你的问题,请参考以下文章

选中模态视图行

奇怪的 UIKit 错误,表格视图行保持选中状态

ListView 保持选中状态?

方向/配置更改后如何维护 ListView 片段状态?

状态栏在关闭模式视图后保持隐藏并在几秒钟后出现

在保持 N 级或多级可展开列表视图的折叠/展开状态后,某些子组不会显示