2012-06-25 53 views
13

說我對我的主要活動,我開始一個新的活動檢查後退鍵是否在android中被按下?

MainActivity > NewActivity 

而且從NewActivity我按下返回鍵

MainActivity < NewActivity 

我想MainActivity做一些事情,如果它NewActivity後顯示已關閉,但MainActivity正常運行時(例如第一次運行應用程序時)不會。有誰知道這是否可能?

回答

8

一對夫婦的想法:

  • 您可以只設置一個標誌MainActivity火災時了NewActivity
  • 您可以從MainActivity調用startActivityForResult並安排NewActivity設定一個結果,您將收到MainActivity.onActivityResult()NewActivity結束。
+0

謝謝!我用startActivityForResult,效果很棒! –

0

當您開始NewActivity時,您需要使用startActivityForResult並使用有效的requestId。一旦NewActivity完成,此requestId將傳回給onActivityResult

16
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) { 
     Log.d(this.getClass().getName(), "back button pressed"); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

@Update。如果你想在NewActivity完成時得到通知,你必須通過startActivityForResult(Intent,requestCode)來啓動它。然後,您必須重寫MainActivity上的onActivityResult()。在這裏檢查requestcode參數,如果返回碼等於提交代碼(當你啓動childActivity的時候),把一些代碼做你的生意。

int MYCODE=1000; 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // Result OK.d. 
    if (requestCode == MYCODE) { 
     // do something good 
    } 
} 
+0

如果後退按鈕被按下,是不是隻聽? –

+0

如果您只想收聽後退按鈕,請使用第一個剪下的代碼。 –

6

您可以重載NewActivity中的onBackPressed()方法,該方法將檢測何時按下後退按鈕。然後通知MainActivity它可以在捆綁中發送一個布爾標誌,以便MainActivity檢測到它在NewActivity之後打開。

在NewActivity:

 @Override 
     public void onBackPressed() { 
       boolean fromNewActivity=true; 

     Intent mainIntent = new Intent(view.getContext(), MainActivity.class); 
     Bundle bundleObj = new Bundle(); 
     bundleObj.putString("fromNewActivity", Boolean.toString(fromNewActivity)); 
     mainIntent.putExtras(bundleObj); 
     startActivityForResult(mainIntent, 0); 
      } 

在MainActivity的onCreate()方法:

 Bundle extras = getIntent().getExtras(); 
     boolean fromNewActivity =Boolean.parseBoolean(extras.getString("fromNewActivity")); 

現在你可以,如果在MainActivity打開NewActivity後或不檢查。

8

我試着用下面的方法來檢測按下第一種方法在活動欄中的活動條上的後退按鈕,第二種方法用來檢測移動硬件按鈕後退或關閉活動按鈕。

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

@Override 
public void onBackPressed() { 
    setResult(RESULT_CANCELED); 
    super.onBackPressed(); 
}