我为上下文菜单注册了几个按钮
如何知道单击了哪个按钮才能显示菜单?
下面是我将要使用的伪代码。我需要做一些与点击哪个按钮相关的事情(我还有几个按钮要声明),我怎么知道上下文菜单是从哪个按钮点击激活的。
编辑:我想我没有说清楚,我想知道单击了哪个按钮才能显示菜单。不是单击哪个菜单项。无论如何,我很快就会添加一个解决方案。感谢
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 :(得分:12)
好的,非常感谢其他人的帮助,这些帮助清除了我对getItemId的怀疑,因为它返回了我分配给菜单项的ID。 就我而言,我想知道在创建上下文菜单之前单击了哪个按钮。
为此,我只需创建一个长变量来存储单击的按钮。可以按以下方式获取按钮的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来做我想做的事。
答案 1 :(得分:4)
我认为使用特定视图的ID更有意义。假设您已经填充了包含您的数据的项目的ListView,但是在您创建了分隔符/标题的一些项目之间。您不希望分隔符处理点击/长按。
在某些情况下,只需引用“position”或MenuInfo.id即可,但根据您的数据结构,您可能需要更多控制权。
您可以做的是为ListView中的项目/视图设置ID(view.setId(x),其中x表示数据结构/对象的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
}
答案 2 :(得分:1)
如果您要查找基础数据的ID(由适配器的getItemId(int)
提供),那么只需在onContextItemSelected
方法中添加以下行:
final AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
final long datasId = info.id // get datas id
答案 3 :(得分:0)
@Override
public boolean onContextItemSelected(MenuItem item) {
item.getItemId();
return super.onContextItemSelected(item);
}
答案 4 :(得分: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);
}