2011-03-15 29 views
107

如何處理活動中的後退按鈕。我在哪裏有一些按鈕。如果我點擊其中一個按鈕,它將重定向到我需要的按鈕。它工作正常,但當我按回按鈕它完成。如何處理活動中的後退按鈕

如何解決這個問題。我對所有這些按鈕只有一項活動。 在此先感謝。

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     if ((keyCode == KeyEvent.KEYCODE_BACK)) 
     { 
      return false; //I have tried here true also 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

我已經使用上面的代碼來處理返回按鈕,但它不工作。當我按回它按鈕時,它自己在那裏。

回答

263

你能應付這樣的:

的API 5級和大於API年長

@Override 
public void onBackPressed() { 
    // your code. 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // your code 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 
+0

小心,這僅適用於API Level 5(Android 2.0及以上版本) – Blundell 2011-03-15 13:27:21

+0

ya我正在使用API​​ Level 5(Android 2.1) – Shekhar 2011-03-15 13:29:26

+4

怎麼樣在片段? – crushman 2014-05-11 06:46:25

8

一個簡單approac h爲捕獲後退按鈕按下並調用moveTaskToBack(真)如下:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     moveTaskToBack(true); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

的Android 2.0引入了一個新onBackPressed方法,以及these recommendations如何處理後退按鈕

+0

沒有它不工作... – Shekhar 2011-03-15 13:31:25

8

你應該使用:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR 
      && keyCode == KeyEvent.KEYCODE_BACK 
      && event.getRepeatCount() == 0) { 
     // Take care of calling this method on earlier versions of 
     // the platform where it doesn't exist. 
     onBackPressed(); 
    } 

    return super.onKeyDown(keyCode, event); 
} 

@Override 
public void onBackPressed() { 
    // This will be called either automatically for you on 2.0 
    // or later, or by the code above on earlier versions of the 
    // platform. 
    return; 
} 

如這裏所界定:http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

如果您使用的是舊版本的編譯代碼,更換android.os。 Build.VERSION_CODES.ECLAIR 5(可以添加例如私人詮釋名爲ECLAIR)

13

除了上述我個人建議

onKeyUp(): 

編程方式說起的keydown將觸發用戶按下時最初的密鑰但是重複,同時用戶保持按鍵被按下。 *

這對所有開發平臺都是正確的。

谷歌開發建議,如果您在視圖中攔截BACK按鈕,則應該在keydown上跟蹤啓動跟蹤KeyEvent,然後使用keyup調用。

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK 
      && event.getRepeatCount() == 0) { 
     event.startTracking(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() 
      && !event.isCanceled()) { 
     // *** Your Code *** 
     return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 
0

這幫助我..

@Override 
public void onBackPressed() { 
    startActivity(new Intent(currentActivity.this, LastActivity.class)); 
    finish(); 
} 

OR ????? 甚至你可以用這個紙盒切換也

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
     startActivity(new Intent(currentActivity.this, LastActivity.class)); 
    finish(); 

} 

我希望這會幫助你..:)

8

對於硬件設備後退按鈕和軟家庭(後退)按鈕,例如, 「< - 」這對我很有用。 (*注意我在活動中有一個應用程序欄/工具欄)

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      //finish(); 
      onBackPressed(); 
      break; 
    } 
    return true; 
} 



@Override 
public void onBackPressed() { 
    //Execute your code here 
    finish(); 

} 

乾杯!

+0

我用完了,它不回到以前的活動。 – Si8 2016-11-04 11:00:58

+1

「finish()」僅關閉當前活動。您需要通過使用意向來處理回到以前的活動。順便說一句,如果你以前沒有「完成()」導航,那麼你之前的活動應該仍然是開放的。 – 2016-11-04 11:57:04

+0

我測試了一些東西,並會更新你。感謝您的迴應。 – Si8 2016-11-04 15:06:43