2015-08-25 29 views
0

我有一個使用意圖去到活動B.有時活動A也開始另一個活動的活動一結束就知道了,活動C.有沒有一種方式活動A知道在這些活動完成時從哪個活動(B或C)重新啓動? 謝謝先進。有沒有辦法從活動的另一個活動恢復

+0

從關鍵字發送數據如: - Bundle b = new Bundle(); b.putString(「from」,「from a activity」); –

+0

謝謝你的回答。 –

回答

1

使用靜態變量來存儲最後一個活動開始,所以在恢復活性的,您可以檢查它。

+0

謝謝你的回答,我會試試這個解決方案,它似乎是最容易實現的。我有一個懷疑,爲什麼必須是靜態的,如果我在onStart或onResume中檢查它的值? –

+0

因爲您要在整個應用程序中共享它,否則您必須在每個活動中存儲主活動引用,以便它們可以寫入相同的變量。 –

2

你可以使用方法startActivityForResult而不是startActivity來啓動你的活動B或C.如果B或C比返回標識本身,你可以讀取它的結果。

+0

感謝您的回答,看起來相當不錯。 –

1
private boolean isB = false; 

public void startActivity(Class<?> activityName){ 
    Intent intent = new Intent(this, activityName); 
    isB = activityName.getName().equals(B.class.getName()); 
    startActivity(intent); 
} 
+0

謝謝你,我也實現了我的靜態變量布爾值。 –

+0

未嘗試,但我認爲你不應該需要一個靜態變量,因爲主要活動不應該被破壞......如果你想添加它是安全的,那麼做,但我認爲你不需要它 – Filnik

1

像Juanjo維加說, 使用activitylifecycle的方法來做到這一點..... 看一看方法.... LifecycleMethods-android

你可以設置一個全局變量或在您想要獲得通知的活動的onResume()方法中使用某些(按照您的邏輯)。它的onPause觸發邏輯後的onResume()將CAL ...

設立全局,您可以使用singleTonsApplication class

+0

我已經把onStart方法中的布爾變量的檢查,雖然也許我應該使用,而不是onResume。我不知道在這種情況下使用一個優勢 –

+0

你應該使用onResume()而不是onStart(),當一個活動暫停(另一個活動在前面啓動)onPause()被調用時,當它來回到屏幕onResume()被調用,而不是onStart(),有很多網站和youtube視頻解釋這個東西.... –

+0

你是對的,但onPause幾乎總是由onStop,我還沒有遠不是那樣的情況。我會按照你的建議。 –

0

退房你的自我,你會很容易地知道

public class MainActivity extends Activity { 

    Button clikBtn; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.e("onCreate", "111111111"); 

     Toast.makeText(MainActivity.this,"onCreate...",Toast.LENGTH_LONG).show(); 
     setContentView(R.layout.activity_main); 

     clikBtn = (Button)findViewById(R.id.clickBtn); 

     /*clikBtn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     });*/ 
    } 

    public void clickButton(View v){ 
     Intent intent = new Intent(MainActivity.this,SecondActivity.class); 
     startActivity(intent); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     Toast.makeText(MainActivity.this,"onStart...",Toast.LENGTH_LONG).show(); 
     Log.e("onStart","999999999"); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     Toast.makeText(MainActivity.this,"onPause...",Toast.LENGTH_LONG).show(); 
     Log.e("onPause", "222222222"); 
     // notify("onPause"); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Toast.makeText(MainActivity.this,"onResume...",Toast.LENGTH_LONG).show(); 
     Log.e("onResume", "333333333"); 
     //notify("onResume"); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     Toast.makeText(MainActivity.this,"onStop...",Toast.LENGTH_LONG).show(); 
     Log.e("onStop", "444444444"); 
     //notify("onStop"); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     Toast.makeText(MainActivity.this,"onDestroy...",Toast.LENGTH_LONG).show(); 
     Log.e("onDestroy", "55555555"); 
     //notify("onDestroy"); 
    } 

    @Override 
    protected void onRestart() { 
     super.onRestart(); 
     Toast.makeText(MainActivity.this,"onRestart...",Toast.LENGTH_LONG).show(); 
     Log.e("onRestart","66666666"); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 
     Toast.makeText(MainActivity.this,"onRestoreInstanceState...",Toast.LENGTH_LONG).show(); 
     Log.e("onRestoreInstanceState", "777777777"); 
     //notify("onRestoreInstanceState"); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     Toast.makeText(MainActivity.this,"onSaveInstanceState...",Toast.LENGTH_LONG).show(); 
     Log.e("onSaveInstanceState", "8888888888"); 
     //notify("onSaveInstanceState"); 
    } 


} 
+0

感謝您的回答,我知道或多或少的生命週期,但我不明白的是爲什麼幾乎總是人們使用onResume或onStart,而不是回收 –

+0

結帳此鏈接.. 。http://stackoverflow.com/a/4653671/2826147 –

+0

謝謝!,非常好的鏈接。 –

2

從活動A,調用下面的方法,假設你有兩個按鈕,並在他們的點擊啓動活動B或活動C:

public void StartOtherActivityB() { 
     Intent aIntent = new Intent(LauncherActivity.this, OtherActivityB.class); 
     startActivityForResult(aIntent, REQUEST_ACTIVITY_B); 


} 



public void StartOtherActivityC() { 
    Intent aIntent = new Intent(LauncherActivity.this, OtherActivityC.class); 
    startActivityForResult(aIntent, REQUEST_ACTIVITY_C); 


} 

和IMP lement onActivityResult()方法如下

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == REQUEST_ACTIVITY_B){ 

     //class restarted from ACTIVITY_B 

    }else if (requestCode ==REQUEST_ACTIVITY_C){ 

     //class restarted from ACTIVITY_C 

    } 
} 
+0

感謝您對這個答案的澄清。這似乎是一個相當好的答案 –

+0

這是比我更優雅的方法,但更復雜。無論如何,你可以試試看。 –

相關問題