Android在短暂点击+传递项目点击详细信息时打开ContextMenu

Lio*_*luz 21 android

 lv.setOnItemClickListener(new OnItemClickListener() {
             @Override
          public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
              TextView text = (TextView) view.findViewById(R.id.btitle);
              registerForContextMenu(text);
              view.showContextMenu();
              }
            });
       }

     @Override
     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
       super.onCreateContextMenu(menu, v, menuInfo);
       TextView text = (TextView) v.findViewById(R.id.btitle);
       CharSequence itemTitle = text.getText();
       menu.setHeaderTitle(itemTitle);

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

     }
Run Code Online (Sandbox Code Playgroud)

你好,

我正在尝试在短项目点击上打开contextMenu.我只是在添加registerForContextMenu(getListView());某个地方时才设法这样做 但是这也会在长按(即我不希望发生)时触发contextMenu.

  • 试过,view.showContextMenu()但除非我添加,否则它什么都不做registerForContextMenu(getListView());.
  • 尝试首先注册点击的项目然后调用showContextMenu()但没有做任何事情......

此外,我想获得点击的项目图像+文本,以便我可以在contextMenu中使用它们.

感谢帮助!

小智 61

我可以使用以下代码打开按钮单击上下文菜单:

public void onButtonClickEvent(View sender)
{
    registerForContextMenu(sender); 
    openContextMenu(sender);
    unregisterForContextMenu(sender);
}
Run Code Online (Sandbox Code Playgroud)

只需将按钮的onClick属性设置为onButtonClickEvent即可.长按不会触发上下文菜单,因为它在显示后立即被取消注册.

  • 这也适用于我,只是为了短暂的点击问题. (2认同)

Kur*_*aum 38

关于短按打开上下文菜单:

这里发布的其他解决方案对我不起作用,因为我使用的是ListFragment.但是,以下解决方案似乎对ListFragment和ListActivity(或者通常只是任何旧的listview)都很有效:

public void onListItemClick(ListView l, View v, int position, long id){
  l.showContextMenuForChild(v);   
}
Run Code Online (Sandbox Code Playgroud)

它更简单,更优雅.实际上,这实际上是ListView类本身如何通过长按来启动上下文菜单.

  • 虽然这是我正在寻找的解决方案(+1!),但它似乎不适合OP正在寻找的内容,因为上下文菜单仍然会长时间显示. (4认同)

Lio*_*luz 4

解决方案:

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
      super.onCreateContextMenu(menu, v, menuInfo);
      MenuInflater inflater = getMenuInflater();
      inflater.inflate(R.menu.context_menu, menu);

      AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
      long itemID = info.position;
      menu.setHeaderTitle("lior" + itemID);
    }
Run Code Online (Sandbox Code Playgroud)

AdapterView.AdapterContextMenuInfo 信息 = (AdapterView.AdapterContextMenuInfo)menuInfo;

为您提供有关单击的列表项的更多详细信息。然后您可以使用info.id, info.position等等来检索详细信息并使用它们的操作(编辑、删除...)。