2011-08-01 52 views
3

我使用上下文菜單動態創建按鈕視圖。當選擇一個上下文菜單項時,我想要檢索觸發上下文菜單的Button視圖。如何獲得觸發上下文菜單的按鈕視圖?

這是我創建的按鈕:

// Create a new button 
Button buttonView = new Button(this); 
// Set button text 
buttonView.setText("MyButton"); 
// Set on click listener 
buttonView.setOnClickListener(new ButtonClickHandler()); 
// Register for context menu 
registerForContextMenu(buttonView); 

這是我如何創建上下文菜單:

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.context_menu, menu); 
} 

這就是我如何處理所選項目:

public boolean onContextItemSelected(MenuItem item) { 

    // Get extra menu information about the item selected 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 

    // 
    switch (item.getItemId()) { 
    case R.id.delete: 

     // Retrieve selected button text 
     String btnText = ((Button) info.targetView).getText().toString(); 
     // etc... 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 
} 

問題在於「(AdapterContextMenuInfo)item.getMenuInfo()」返回null,即沒有關於ite的額外信息米我期待在info.targetView中獲得Button視圖。顯然這隻適用於ListView,因爲AdapterView負責填充這些額外的信息。

我想我應該在「onCreateContextMenu」中添加一些內容來附加這些信息。附上這些信息的示例代碼將非常受歡迎。

感謝

回答

2

Button是用於創建上下文菜單是View參數傳遞到onCreateContextMenu

+1

菲爾,我怎麼能得到用於創建上下文菜單到'onContextItemSelected'的'Button'? – hleroy

+0

@hleroy,它已經在那裏。當你爲上下文菜單註冊一個'View'(比如'Button'):'registerForContextMenu(myButton);'時,你可以點擊按鈕來打開一個上下文菜單。然後,在'onCreateContextMenu(ContextMenu菜單,View v,ContextMenuInfo menuInfo)'中,'View v'是按鈕。你可以檢查被選中的視圖是否是某個按鈕,如:if(v == myButton){do something; }' – Phil

+3

嗨菲爾,我明白我可以在創建菜單時(即在'onCreateContextMenu'中)獲得按鈕。當該項目被選中時(即,在'onContextItemSelected'中),我需要按鈕。 – hleroy

相關問題