在ListView中长按以开始选择项目?

3
我的问题很简单:如何使用长按功能让用户从ListView中选择项目?到目前为止,我只知道如何检测“短”点击并采取适当的行动。
另外,我想在所选项目上显示一个勾号。如何实现?
3个回答

2

2

它的工作方式与onClickListener相同,只是您要检查的是onLongClickListener。因此,您将拥有这样的结构:

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

如果您想显示一个勾选标记,我认为最好的方法是定义自己的行布局,在该布局中只需在行内容的右侧定义一个CheckBox。这样,您不需要传递一些 Android 布局给ArrayAdapter,而是指定您的新布局,例如:
your_adapter = new ArrayAdapter(context, R.layout.your_new_layout, initial_rows);

如果在我的布局中,我使用可见性为GONE的复选框,并在长按时显示它,这样会起作用吗? - An SO User
你需要在适配器上调用notifyDataSetChanged方法,然后getView方法将为每个可见行调用,然后你可以做任何你想做的事情,比如显示复选框、更改背景颜色等。 - Stephane Mathis
当然,只需在重写的 getView() 方法中声明 onLongClickListener。该方法的第二个参数(通常称为 convertView)是每一行的布局(非常模糊地说)。您可以通过使用 convertView.findViewById(R.id.my_checkbox) 获取 CheckBox 的视图,之后您可以做任何想做的事情,例如将其可见性设置为 VISIBLE、GONE 等等。 - nKn
@NKN 是的,我明白大意。感谢Stephane的补充 =) 不过,记住所选内容将是手动任务,对吧? - An SO User
是的,一个整数列表就足够了,只需保存行号即可。 - Stephane Mathis

2

简单: OnLongClickListener 是长按监听器。

然后,您需要手动记住已选或未选中的内容。您需要通知列表发生了哪些变化,并在适配器的 getView 方法中执行某些操作。

最好使用上下文操作栏模式来同时与所有项目进行交互,详见 此处


我不是在谈论简单地显示上下文菜单,而是批量选择项目。 - An SO User

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接