2011-05-16 68 views
5

我已经注册了上下文菜单得到视图id从oncontextitemselected

我怎么知道哪个按钮被点击的菜单出现几个按钮?

下面是我将要使用的伪代码。我需要做一些与点击哪个按钮相关的东西(我有更多的按钮被声明),我怎么知道上下文菜单是从哪个按钮点击激活的。

编辑:我想我没有让自己清楚,我想知道哪个按钮被点击的菜单出现。不是哪个菜单项被点击。无论如何,我有一个解决方案,我很快就会添加。

感谢

private static final int SEND_AS_TEXT = Menu.FIRST; 
private static final int SEND_AS_IMAGE = Menu.FIRST + 1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     sendAllBtn = (Button)findViewById(R.id.sendAllBtn); 
     sendAllBtn.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     registerForContextMenu(v); 
     openContextMenu(v); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     switch(item.getItemId()){ 
     case SEND_AS_TEXT: 
      //do sth related to the button clicked 
      break; 

     } 
     return super.onContextItemSelected(item); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     // TODO Auto-generated method stub 
     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.add(Menu.NONE, SEND_AS_TEXT, SEND_AS_TEXT, "Send As Text"); 
     menu.add(Menu.NONE, SEND_AS_IMAGE, SEND_AS_IMAGE, "Send As Image"); 
    } 
+0

粘贴代码,您使用哪种 – 2011-05-16 11:38:35

+0

我很抱歉,我是移动的同时刚才添加详细浏览这个网站:d – 2011-05-16 14:35:52

回答

11

好,非常感谢从中清除我的疑惑getItemId别人的帮助,因为它返回的ID我分配给菜单项。 就我而言,我想知道在创建contextmenu之前点击了哪个按钮。

要做到这一点,我只需创建一个长变量来存储被点击的按钮。按钮的ID可以在下面获得:

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    // TODO Auto-generated method stub 
    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle("Send As.."); 
    menu.add(Menu.NONE, SEND_AS_TEXT, SEND_AS_TEXT, "Send As Text"); 
    menu.add(Menu.NONE, SEND_AS_IMAGE, SEND_AS_IMAGE, "Send As Image"); 
    btnId = v.getId(); //this is where I get the id of my clicked button 
} 

,后来我只需要参考这一btnId做我想做的事情。

0
@Override 
public boolean onContextItemSelected(MenuItem item) { 
    item.getItemId(); 
    return super.onContextItemSelected(item); 
} 
+0

我假设这不是我想要的,getItemId返回创建上下文菜单时分配的菜单项的ID – 2011-05-16 14:45:07

0

试试这个...

@Override 
public boolean onContextItemSelected(MenuItem item) 
{ 
    if(item.getItemId()==SEND_AS_TEXT) 
    { 
     //code for send text 
    } 
    else if(item.getItemId()==SEND_AS_IMAGE) 
    { 
     //code for send image 
    } 
    return super.onContextItemSelected(item); 
} 
+0

我认为这不是我想要的,getItemId返回创建时分配的菜单项的ID上下文菜单中,我想知道在创建上下文菜单之前点击了哪个按钮。无论如何,我有解决方案,我会稍后发布。 – 2011-05-17 04:28:03

+0

在OnClick上放置一个局部变量和设置值,就像if(v == bt){variable = bt} ......并在onContextItemSelected(MenuItem项)中获取该值 – 2011-05-17 04:33:35

1

如果您正在寻找您的底层数据的ID(提供适配器的getItemId(int)),则只需添加在onContextItemSelected方法如下几行:

final AdapterView.AdapterContextMenuInfo info = 
    (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
final long datasId = info.id // get datas id 
4

我认为它使使用更感特定视图的ID。假设你已经有一个ListView填充了包含你的数据的项目,但是在你创建分隔符/标题的一些项目之间。您不希望分隔符处理点击/长时间点击。

在某些情况下,只需引用“position”或MenuInfo.id即可,但取决于您的数据结构,您可能需要更多的控制权。

你可以做的是在你的ListView(view.setId(x),其中x代表你的数据结构/对象的ID /位置设置项目/视图的ID,然后,当创建一个ContextMenu并处理在它选择执行以下操作来读取ID出来:

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

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
    int id = info.targetView.getId(); 

    // now you can refer to your data with the correct ID of yours 
} 

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
    int id = info.targetView.getId(); 

    // now you can refer to your data with the correct ID of yours 
} 
+0

+1用于抽出时间来回答问题,还有示例代码!保持良好的工作! – scraimer 2011-12-21 06:54:03

+0

int id = info.position;为我工作。 – msj121 2013-12-15 02:33:59

+0

onContextItemSelected中的info.targetView.getId()返回-1,不知道为什么? – neobie 2014-05-20 08:44:18