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

时间:2010-09-15 22:37:05

标签: 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);

     }

您好,

我正在尝试在短项目点击上打开contextMenu。 只有当我在某处添加registerForContextMenu(getListView());时,我才设法这样做,但这也会在长时间点击时触发contextMenu(我不想发生这种情况)。

  • 尝试view.showContextMenu()但除非我添加registerForContextMenu(getListView());,否则它不会执行任何操作。
  • 尝试首先注册点击的项目然后调用showContextMenu()但是没有做任何事情......

另外,我想获得点击的项目图片+文字,以便我可以在contextMenu中使用它们。

感谢帮助!

6 个答案:

答案 0 :(得分:60)

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

public void onButtonClickEvent(View sender)
{
    registerForContextMenu(sender); 
    openContextMenu(sender);
    unregisterForContextMenu(sender);
}

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

答案 1 :(得分:38)

关于通过短暂打开打开上下文菜单:

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

public void onListItemClick(ListView l, View v, int position, long id){
  l.showContextMenuForChild(v);   
}

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

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

AdapterView.AdapterContextMenuInfo info =   (AdapterView.AdapterContextMenuInfo)menuInfo;

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

答案 3 :(得分:1)

在我的情况下,我有BaseAdapter并为每个listView项目实现了click on按钮(在getView方法中):

ImageButton menuBtn = (ImageButton) convertView.findViewById(R.id.itemListMenu);
menuBtn.setOnClickListener(new android.view.View.OnClickListener() {
    public void onClick(View v) {
        parent.showContextMenuForChild(v);
    }
 });

答案 4 :(得分:0)

我相信如果您向视图添加OnLongClickListener,您应该可以阻止它在长按一下显示上下文菜单。

在onItemClick中,view参数是项目视图,因此您应该能够从中获取ImageViews或TextViews:

view.findById(R.id.my_image_view);

答案 5 :(得分:0)

我的解决方案:

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {               
            mListView.showContextMenuForChild(view);
        }
    });