代码之家  ›  专栏  ›  技术社区  ›  Lior Iluz

Android打开快捷菜单+传递项目点击详情

  •  21
  • Lior Iluz  · 技术社区  · 15 年前
     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);
    
         }
    

    只有我加上 registerForContextMenu(getListView());

    • 尝试 view.showContextMenu() registerForContextMenu(getListView());
    • 尝试先注册单击的项目,然后调用 showContextMenu()

    另外,我想得到点击的项目图像+文本,这样我就可以在上下文菜单中使用它们。

    谢谢你的帮助!

    6 回复  |  直到 9 年前
        1
  •  63
  •   Konrad    13 年前

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

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

        2
  •  38
  •   Kurtis Nusbaum    13 年前

    关于在短时间单击时打开关联菜单:

    这里发布的其他解决方案不适用于我,因为我使用的是ListFragment。但是,下面的解决方案似乎对ListFragment和ListActivity(或者通常是任何旧的listview)都非常有效:

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

    更简单,更优雅。实际上,ListView类本身就是这样在长时间单击时启动上下文菜单的。

        3
  •  4
  •   Gueorgui Obregon Vikram    9 年前

    解决方案:

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

    那你可以用 info.id, info.position 依此类推,以检索详细信息并使用这些操作(编辑、删除…)。

        4
  •  1
  •   Shay Zalman    9 年前

    在我的例子中,我有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);
        }
     });
    
        5
  •  0
  •   Cheryl Simon    15 年前

    OnLongClickListener 对于视图,您应该能够阻止它在长时间单击时显示上下文菜单。

    view 参数是项视图,因此您应该能够从中获取imageview或textview:

    view.findById(R.id.my_image_view);
    
        6
  •  0
  •   Nicola    11 年前

    我的解决方案:

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