【问题标题】:Android: How to find the position clicked from the context menuAndroid:如何找到从上下文菜单中单击的位置
【发布时间】:2010-03-16 10:41:26
【问题描述】:

我有一个充满数据的列表视图。我使用以下代码为listview 设置了一个上下文菜单:

list.setOnCreateContextMenuListener
(
  new View.OnCreateContextMenuListener() 
  {
        public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) 
        {
       AdapterContextMenuInfo mi =(AdapterContextMenuInfo) menuInfo;
       menu.add(0, 0, 0, "Delete item");                
    }
   }
);

我有以下方法覆盖来控制选中的上下文菜单菜单项:

@Override
public boolean onContextItemSelected(MenuItem item) 
{
  switch(item.getItemId()) 
  { 
  case 0: 
    ShowAlert("hello from delete item");
    break; 
  default: 
  return super.onContextItemSelected(item); 
  } 
  return true; 
}

在这个被覆盖的方法中,我怎样才能找到被点击的列表视图的项目?

【问题讨论】:

    标签: android android-emulator


    【解决方案1】:

    您可以使用ContextMenu.ContextMenuInfo

    类似的东西:

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        int index = info.position;
    }
    

    您还可以获得正在显示菜单的确切View

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        int index = info.position;
        View view = info.targetView;
    }
    

    【讨论】:

    • 非常感谢。最好的祝福。何塞
    • 在我的情况下,信息始终为空..有人可以帮忙吗?我正在使用网格视图。
    • 我终于搞定了,我使用的是自定义 GridView,其中 getContextMenuInfo() 方法没有实现。如果有人需要样品,我已经发布了here
    【解决方案2】:
    private static final int EDIT_ID = Menu.FIRST + 3;
    private static final int DELETE_ID = Menu.FIRST + 4;
     @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenu.ContextMenuInfo menuInfo) {
            menu.add(Menu.NONE, EDIT_ID, Menu.NONE, "Edit").setAlphabeticShortcut(
                    'e');
            menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete")
                    .setAlphabeticShortcut('d');
        }
    
        @Override
        public boolean onContextItemSelected(MenuItem item) {
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                    .getMenuInfo();
            switch (item.getItemId()) {
            case EDIT_ID:
    
                edit(info.id);
                return (true);
            case DELETE_ID:
    
                delete(info.id);
                return (true);
            }
    
            return (super.onOptionsItemSelected(item));
        }
    

    【讨论】:

    • 非常感谢。最好的祝福。何塞
    • 我用 recyclerview 试过这个,但它似乎不起作用。有什么解决方法吗?
    【解决方案3】:

    好的,解决问题 info null **** 使用静态成员并从持有人的位置设置值 将值保存在 longclick 方法成员中,例如:-

    public class CurrentPosition {
       public static  int Pos{ get; set; }
    }
    
    public bool OnLongClick(View v)
    {
        CurrentPosition.Pos = Position;
        return false;
    }
    

    并在您的上下文中使用选择项:

    public override bool OnContextItemSelected(IMenuItem item)
    {
        switch (item.ItemId)
        {
            case 0:
                return true;
            case 1:
                Toast.MakeText(this,CurrentPosition.Pos.ToString(), ToastLength.Long).Show();
                return true;
            case 2:
                Toast.MakeText(this, "Save", ToastLength.Long).Show();
                return true;
            }
            return true;
        }
    }
    

    C#代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      相关资源
      最近更新 更多