[英]get view id from 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");
}
好的,非常感謝其他人的幫助,這些幫助清除了我對getItemId的懷疑,因為它返回了我分配給菜單項的ID。 就我而言,我想知道在創建上下文菜單之前單擊了哪個按鈕。
為此,我只需創建一個long變量來存儲單擊的按鈕。 可以按以下方式獲取按鈕的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來做任何我想做的事情。
我認為使用特定視圖的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
}
如果要查找基礎數據的ID(由適配器的getItemId(int)
),則只需在onContextItemSelected
方法中添加以下行:
final AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
final long datasId = info.id // get datas id
@Override
public boolean onContextItemSelected(MenuItem item) {
item.getItemId();
return super.onContextItemSelected(item);
}
試試這個...
@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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.