2011-07-21 18 views
-6

我需要重寫後退按鈕以啓動上下文菜單。當「返回」鍵被擊中時啓動ContextMenu?

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    switch (keyCode) 
    { 
    case KeyEvent.KEYCODE_BACK : 

     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 


     @Override 
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { 
super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle("Quit"); 
    menu.add(0, v.getId(), 0, "Yes"); 
    menu.add(0, v.getId(), 0, "No"); 

} 
    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
      if(item.getTitle()=="Yes"){quit(0);} 
      if(item.getTitle()=="No"){quit(1);} 
     else {return false;} 
    return true; 
    } 

我如何可以調用的ContextMenu從內部 '情況KeyEvent.KEYCODE_BACK:'?

+15

http://commonsware.com/blog/2011/07/21/back-means-back.html – CommonsWare

+2

@CommonsWare:我不認爲這是特別禮貌的咆哮這樣的人。 –

+1

是的,我明白,雖然我的用戶不會很高興,如果他們點擊後退按鈕,它會在中期會議結束。我使用這個來請求確認用戶是否想要恢復到主菜單。 – jblz

回答

0

使用openContextMenu:你需要在你想有上下文菜單中打開查看通過,但這應該工作。

+0

謝謝 - 我從來沒有遇到過手動傳遞視圖,我通常看到它被傳遞爲'視圖v'方法,如'onCreateContextMenu'。我如何定義/引用當前視圖?謝謝 – jblz

+0

好吧,上下文菜單是針對特定視圖的:通常它是一個ListView。使用'findViewById(R.id. {無論您想要的ID})的結果調用'openContextMenu';'獲取相關視圖的上下文菜單。 – Femi

-1

覆蓋onBackPressed方法

@Override 
public void onBackPressed() { 
    //Your code here 
} 
+0

謝謝,我的意思是,我如何調用contextmenu? AFAIK唯一的方法來調用'registerForContextMenu()' – jblz

0

我不知道,但我認爲你不能打開文本菜單返回鍵因爲文本菜單應該在特定的視圖中打開。

但是你可以在返回密鑰打開任何對話框看到下面的代碼

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) 
     { 
      //Your Dialog Code 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
0

這將檢測用戶是否點擊了後退按鈕。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    // Checks if back key was clicked and if it was clicked only once 
    // since multiple clicks could be configured in android for other functions 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) 
    { 
     // Code to open contextmenu 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

This會給使用View.openContextMenu()信息。

0

只需致電Activity.openOptionsMenu()即可打開菜單。

 @Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    switch (keyCode) 
    { 
    case KeyEvent.KEYCODE_BACK : 
     MyActivity.this.openOptionsMenu(); 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 

希望這會幫助你。

+0

謝謝,但它沒有(我確實改變了我的活動)。我的代碼的其餘部分(我添加了一個toast消息,用於在按回鍵時進行測試)執行得很好。上述代碼在不幸點擊時看起來什麼也不做。我的onCreateContextMenu和onContextItemSelected看起來很好。感謝您的輸入 – jblz

+0

您需要爲此創建並覆蓋'onCreateOptionsMenu' .. –

+0

再次感謝您的幫助,儘管它的屏幕中間彈出了「上下文菜單」,與屏幕底部的選項菜單相反。我通常希望onCreateOptionsMenu在按下'menu'時出現。 – jblz

相關問題