onCreateContextMenu未被调用

时间:2012-01-29 21:34:45

标签: android listactivity contextmenu

看起来根本没有调用onCreateContextMenu。在我的onCreate for ListActivity中,我有:

list = getListView();
registerForContextMenu(list);

(我知道这是多余的,我刚刚传递了getListView(),结果相同)。

这是我的onCreateOntextMenu;

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    Log.d("LM", "onCreateContextMenu");

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_landmarks, menu);
}

永远不会生成日志。没有人有任何建议吗?

6 个答案:

答案 0 :(得分:8)

我的想法是ListView拦截事件而不进入contextMenu行为。这对我来说很有意义,因为OnItemLongClickListener行为与contextMenu重叠。如果不是它如何识别contextMenu和OnItemLongClickListener?

答案 1 :(得分:1)

我的问题与lulumeya的答案密切相关,这使我指出了正确的方向。我之前已经多次完成了上下文菜单,直到现在还没有遇到过这种情况。

我在View.setOnClickListener(listener)中呼叫Adapter.getView(...)时应该ListView.setOnItemClickListener(listener),以避免与上下文菜单冲突。

通常,我确信OnItemClickListener更加优化,特别是因为每次创建或回收视图时,只使用一个侦听器实例而不是创建新实例。

答案 2 :(得分:0)

尝试找到registerForContextMenu(list);作为你在onCreate方法中调用的最后一个方法。 我的意思是这个方法应该在之前调用列表适配器之后调用。

答案 3 :(得分:0)

只需删除youwidget.setonLongclicklisteneryourwidget.setLongClickable

即可

然后在registerforContextmenu(yourwidget)中添加onCreate() 然后根据使用的小部件添加代码。

希望它会有所帮助。

答案 4 :(得分:0)

我遇到了这个问题,只能通过确保

来解决
  1. 因为分别是Activity注册了Views,同样的Activity必须覆盖onCreateContextMenu();在片段中执行此操作将无法正常工作
  2. 因为我使用了一个额外的片段来创建适配器(并注册它)片段而不是Activity必须覆盖onContextItemSelected()。
  3. 我正在考虑放弃长按弹出窗口,在卡片右边缘放置一个Youtube风格的按钮,弹出一个菜单,不会将其他所有内容淡化为背景 - 那个btw的搜索词是什么? / p>

答案 5 :(得分:-2)

您必须在registerForContextMenu(View view)中调用onCreate(Bundle savedInstanceState)方法。