簡體   English   中英

從oncontextitemselected獲取視圖ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM