长按开始选择 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 中的选定项目