长按开始选择 ListView 中的项目?

Posted

技术标签:

【中文标题】长按开始选择 ListView 中的项目?【英文标题】:Long click to begin selecting items in a ListView? 【发布时间】:2014-02-20 05:39:07 【问题描述】:

我的问题很简单:如何使用长按让用户从 ListView 中选择项目?到目前为止,我只知道如何检测“短”点击并采取适当的措施。

另外,我想在所选项目上显示一个复选标记。怎么办?

【问题讨论】:

【参考方案1】:

简单:OnLongClickListener

然后您需要手动记住选择或未选择的内容。您需要通知列表的更改并在适配器的 getView 方法中执行某些操作。

使用 Contextual ActionBar 模式一次与所有项目交互是一个很好的做法,请参阅here。

【讨论】:

我说的不是简单地显示上下文菜单,而是批量选择项目【参考方案2】:

回复于https://***.com/questions/12090394/i-cant-get-longclick-to-work-on-listactivity:

// Optional, added if done from ListActivity (or possibly ListFragment)
ListView lv = getListView();
// Set on this if overriding OnItemLongClickListener, otherwise use an anonymous inner function
lv.setOnItemLongClickListener(this);

【讨论】:

【参考方案3】:

它的工作方式与onClickListener 相同,只是您检查的是onLongClickListener。所以你会有这种结构:

your_view.setOnLongClickListener(new View.OnLongClickListener() 
  public boolean onLongClick(View v) 
    ...
  
);

如果你想显示一个复选标记,我认为最好的方法是定义你自己的行布局,你只需在行内容的右侧定义一个CheckBox。这样,您无需传递 ArrayAdapter 一些 android 布局,而是指定您的新布局,例如:

your_adapter = new ArrayAdapter(context, R.layout.your_new_layout, initial_rows);

【讨论】:

如果在我的布局中,如果我保留一个可见性为GONE 的复选框,并在长按时显示它,它会起作用吗? 你需要在你的适配器上调用 notifyDataSetChanged,然后 getView 方法会被每个可见的行调用,然后你可以做任何你想做的事情,比如显示一个复选框,改变背景颜色等等。跨度> 当然,只需在覆盖的getView() 方法中声明onLongClickListener。该方法的第二个参数(通常称为convertView)是(非常含糊地说)每一行的布局。你可以简单地使用convertView.findViewById(R.id.my_checkbox) 获取CheckBox 的视图,然后你可以做任何你想做的事情,设置它的可见性 VISIBLE, GONE... @NKN 是的,我明白了要点。并且感谢 Stephane 的补充 =) 但是,记住选择的内容将是手动任务,对吧? 可以,一个整数列表就够了,保存行号就行了。

以上是关于长按开始选择 ListView 中的项目?的主要内容,如果未能解决你的问题,请参考以下文章

获取 ListItem ContextMenu 中的选定项目

ListView的点击事件,长按事件,数据刷新

取消选择 ListView 中的选定项目

android - 长按从 ListView 中删除项目

长按 ListView 项目的 Android onCreateContextMenu 致命异常

关于andoird listView的问题 多个listView 添加长按事件