在ListView中禁用长按单击标题(或页脚)

时间:2011-01-09 07:24:37

标签: android listview onlongclicklistener

我的问题与此类似:ListView: disabling clicking/focus

但是,我不想禁用默认的onClick,只需长按即可。我已经注册了我的ListView以创建上下文菜单,我想为头元素禁用它(或者至少改变它的行为)。我该怎么做呢?

谢谢!

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

我没试过,但它可能有用。

ListView扩展了ViewGroup,因此当“长按”ListView时,应该通过长按来传递监听器哪个子视图。

创建自己的ListView类,该类实现onLongClickListener,然后检查View是Header还是Footer,如果是,则返回'true'以显示long-click已被'消耗'并且表示不再进一步应该采取行动。

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;
    }
}

答案 2 :(得分:0)

This答案几乎是好的,问题在于长时间点击没有取消,它只是有替代行为。也无所事事,会让用户感到困惑,因为用户界面会像长时间点击一样,但不会发生任何事情。

解决方案非常简单。

  1. 通过添加具有该功能的页眉/页脚listView.addFooterView(footer, null, false);
  2. ,禁用常规点击和长按
  3. 在页眉/页脚上手动设置单击侦听器