4

我的问题与此类似:ListView: disable click/focus

但是,我不想禁用默认的 onClick,只是长按。我已经为创建上下文菜单注册了我的 ListView,并且我想为标题元素禁用它(或者至少改变它的行为)。我该怎么办?

谢谢!

4

3 回答 3

4

弄清楚了!menuInfo 不一定是 AdapterContextMenuInfo (具有位置)并不明显。

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    if (((AdapterContextMenuInfo)menuInfo).position == 1) {
        inflater.inflate(R.menu.foo1, menu);
        return;
    }
    inflater.inflate(R.menu.foo2, menu);
}
于 2011-01-09T13:05:35.880 回答
1

我还没有尝试过,但它可能会起作用。

ListView 扩展了 ViewGroup,因此当 ListView 被“长按”时,应该向侦听器传递长按下的哪个子视图。

创建您自己的实现 onLongClickListener 的 ListView 类,然后检查该视图是您的页眉还是页脚,如果是,则返回“true”以显示长按已被“使用”并指示不应采取进一步行动采取。

protected MyListView extends ListView
    implements onLongClickListener {

    public boolean onLongClick (View v) {
        boolean longClickConsumed = false;

        // Check if v is either your Header or Footer
        // if so then set longClickConsumed to be true

        return longClickConsumed;
    }
}
于 2011-01-09T09:03:02.820 回答
1

这个答案几乎是好的,问题在于没有取消长点击,它只是有替代行为。同样什么也不做也会让用户感到困惑,因为 UI 会表现得好像有一个长按但什么都不会发生。

解决方案非常简单。

  1. 通过使用该功能添加页眉/页脚来禁用常规单击和长单击listView.addFooterView(footer, null, false);
  2. 在页眉/页脚上手动设置点击监听器
于 2014-05-09T08:33:54.990 回答