我有一個使用意圖去到活動B.有時活動A也開始另一個活動的活動一結束就知道了,活動C.有沒有一種方式活動A知道在這些活動完成時從哪個活動(B或C)重新啓動? 謝謝先進。有沒有辦法從活動的另一個活動恢復
回答
使用靜態變量來存儲最後一個活動開始,所以在恢復活性的,您可以檢查它。
謝謝你的回答,我會試試這個解決方案,它似乎是最容易實現的。我有一個懷疑,爲什麼必須是靜態的,如果我在onStart或onResume中檢查它的值? –
因爲您要在整個應用程序中共享它,否則您必須在每個活動中存儲主活動引用,以便它們可以寫入相同的變量。 –
你可以使用方法startActivityForResult而不是startActivity來啓動你的活動B或C.如果B或C比返回標識本身,你可以讀取它的結果。
感謝您的回答,看起來相當不錯。 –
private boolean isB = false;
public void startActivity(Class<?> activityName){
Intent intent = new Intent(this, activityName);
isB = activityName.getName().equals(B.class.getName());
startActivity(intent);
}
謝謝你,我也實現了我的靜態變量布爾值。 –
未嘗試,但我認爲你不應該需要一個靜態變量,因爲主要活動不應該被破壞......如果你想添加它是安全的,那麼做,但我認爲你不需要它 – Filnik
像Juanjo維加說, 使用activitylifecycle的方法來做到這一點..... 看一看方法.... LifecycleMethods-android
你可以設置一個全局變量或在您想要獲得通知的活動的onResume()方法中使用某些(按照您的邏輯)。它的onPause觸發邏輯後的onResume()將CAL ...
設立全局,您可以使用singleTons或Application class
我已經把onStart方法中的布爾變量的檢查,雖然也許我應該使用,而不是onResume。我不知道在這種情況下使用一個優勢 –
你應該使用onResume()而不是onStart(),當一個活動暫停(另一個活動在前面啓動)onPause()被調用時,當它來回到屏幕onResume()被調用,而不是onStart(),有很多網站和youtube視頻解釋這個東西.... –
你是對的,但onPause幾乎總是由onStop,我還沒有遠不是那樣的情況。我會按照你的建議。 –
退房你的自我,你會很容易地知道
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");
}
}
感謝您的回答,我知道或多或少的生命週期,但我不明白的是爲什麼幾乎總是人們使用onResume或onStart,而不是回收 –
結帳此鏈接.. 。http://stackoverflow.com/a/4653671/2826147 –
謝謝!,非常好的鏈接。 –
從活動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
}
}
感謝您對這個答案的澄清。這似乎是一個相當好的答案 –
這是比我更優雅的方法,但更復雜。無論如何,你可以試試看。 –
- 1. 暫停/恢復活動的另一個活動開始的Android
- 2. 活動轉換:執行停止沒有恢復的活動
- 3. 獲取java.lang.IllegalStateException:恢復活動時沒有任何活動
- 4. 從其他活動恢復活動
- 5. 有沒有辦法從Espresso Recorder啓動特定的活動?
- 6. 有沒有辦法顯示一個片段內的活動
- 7. 有沒有辦法在iOS中打斷一個活動的UITouch
- 8. 恢復活動
- 9. 有沒有辦法判斷一個活動是否開始?
- 10. 有沒有更好的方法來完成另一項活動的活動?
- 11. 從另一個活動更新活動
- 12. 新的活動沒有得到控制,從另一個活動的Android
- 13. AlertDialog - 無法恢復活動
- 14. 無法恢復活動
- 15. 無法恢復活動nullpointerexception
- 16. 從活動恢復IntentService
- 17. 如何從另一個活動中的RadioGroup中恢復數據?
- 18. Android:無法從一個活動導航到另一個活動
- 19. MFC:有沒有辦法沒有On_Bn_Clicked()事件的活動按鈕?
- 20. 有一個主要活動,調用另一個活動
- 21. 從一個活動到另一個活動的動態列表
- 22. Android:surfaceView無法從暫停恢復活動()
- 23. PendingIntent恢復活動
- 24. 如何退出所有活動(包括恢復活動)
- 25. 從另一個活動調用另一個活動
- 26. 有沒有辦法從jQuery Filterizr獲取活動類別?
- 27. Android應用程序沒有響應java.lang.RuntimeException:無法恢復活動
- 28. Android通知將恢復現有活動
- 29. 恢復上次活動並完成上一個活動
- 30. 另一種方法從一個活動傳遞值到另一個活動
從關鍵字發送數據如: - Bundle b = new Bundle(); b.putString(「from」,「from a activity」); –
謝謝你的回答。 –