2012-11-14 308 views
3

我有5個不同的屏幕多個活動。如果在第一屏幕和其他屏幕中按下後退鍵,我應該如何處理情況?完成()和System.exit()不工作..如果按下「後退」按鈕,我該如何退出我的應用程序? 下面的編碼不工作?請給我建議的方式來退出具有多屏後退按鈕被按下

public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
       this); 

     new AlertDialog.Builder(this) .setMessage("Are you sure you want to exit?") 
      .setCancelable(true) 
      .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
      { 
      public void onClick(DialogInterface hi, int dd) 
      { 

       Intent exitIntent = new Intent(Mapper.this,SplashActivity.class); 
       exitIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       SplashActivity.mHandler.sendEmptyMessage(0);     
       startActivity(exitIntent);  


      } 
      } 
     ) 
     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
     { 
      public void onClick(DialogInterface hi, int dd) 
      { 

      } 
     } 
     ); 
     AlertDialog alertDialog = alertDialogBuilder.create(); 

      // show it 
      alertDialog.show(); 
     //AlertDialog alert1 = alt_bld.create(); 
     //alert1.setTitle("EXIT"); 
     //alert1.show(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

    And in Start.Class: 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_HOME) 
    { 
     mHandler.removeCallbacksAndMessages(null); 
     SplashActivity.this.finish(); 
    } 

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

很多人試圖用這個來幫助你,他們都是對的。要麼接受一個答案,要麼對你的問題更具體 – Jameo

回答

6

就覆蓋onBackPressed()這樣的應用程序...

@Override 
public void onBackPressed() 
{ 
    finish(); 
} 
+0

我有5個活動......我已經使用了上面的代碼,就像你說的那樣..並且在調用每個活動之後使用finsh()..但是應用程序將進入前一個屏幕但不退出..我應該怎麼做在2或3屏幕退出?我學會了我們已經從堆棧中彈出活動,但我應該怎麼做? – Sindu

+2

試試'super.onBackPressed();' –

+1

如果你想一次關閉一堆活動,你必須使用'startActivityForResult(inent,R.id.(); @Override 保護無效onActivityResult(int requestCode,int resultCode,Intent數據);當開始另一個活動,當你想關閉活動時, { \t if(requestCode == R.id.your_button && resultCode == RESULT_OK) \t {setResult(RESULT_OK);完(); }' –

0

什麼你肯定要找的是onBackPressed :

@Override 
public void onBackPressed() { 
    //do your intent here 
} 

我不是從上下文知道是什麼:

SplashActivity.mHandler.sendEmptyMessage(0); 

這一行確實如此,但除此之外,您的原意應該回到您的啓動畫面。我會做什麼,如果你真的想離開你的背部按應用程序,我會把一些數據有,說

exitIntent.putExtra("toExit", true); 

基本上只是你飛濺的活動可以讀取並決定呼籲結束標誌()本身。手動關閉應用程序的唯一「良好」方式是完成第一個活動(儘管實際上它很難強制用戶退出您的應用程序)

編輯: 確定在您的應用程序中,您可以返回(外觀像SplashActivity),你要去尋找意向中的onCreate像這樣:

Intent i = getIntent(); 
Bundle extras = i.getExtras(); 

Boolean toExit = extras.getString("toExit"); 
if(toExit){ 
    finish(); 
} 
+0

我已經使用完成()後調用每個活動的意圖..但笏它的確是它返回到之前的活動,而不是退出應用程序...這裏有什麼解決方案.. – Sindu

+0

看看我的編輯到我的答案。你應該在活動中迴應完成。你將通過在意圖中放置一個布爾值來實現,然後在onCreate中檢查你的第一個活動。如果它看到的意圖,它調用完成,應用程序應該退出 – Jameo

0

爲什麼你想後退按鈕按下退出上呢?這不是類似於Android的行爲。按回來用戶通常要返回到以前的活動,但不是要退出您的應用程序。 Android會在需要時處理自己的活動破壞。

+0

據我瀏覽和看到背按下使應用程序退出我是錯誤的/ – Sindu

+0

上按下將只退出您的應用程序,如果它是根活動(或您在應用中創建的第一項活動) – Jameo

+0

@Sindu Jameo是wright。返回通常意味着「返回」,但不能退出。 Android不同於桌面操作系統......這裏有很多相同的問題,嘗試搜索以瞭解它是如何工作的。 – Prizoff

0

首先,你是想說你想要這樣嗎?

Activity1 --> Activity2 --> Activity3 --> Activity4 --> Activity5 

當前活動是Activity5。返回按下。退出整個申請?您是否想退出應用程序,然後按下您當前正在進行的任何活動?像Activity3一樣,按下然後退出?如果是,則可以在調用者活動的每個startActivity()調用之後調用finish()。或者,您可以選擇在您打電話的每個活動中使用結果變量。例如,可以通過從Activity1 - Activity1中通過staryActivityWithResult()調用Activity1並從Activity1中的onActivityResult()方法中等待其結果來調用Activity2。所以如果在Activity2上按下後面,在完成前讓Activity2的setResult()方法傳遞一些變量。這個結果將被傳遞給調用者Activity1,然後你可以根據你傳遞的結果做任何你想做的事情。

+0

雅這是我想要的笏,但如果我使用完成()我的應用程序不退出? – Sindu