[英]Android Pass Data from Activity to Fragment Without creating a new Instance
[英]Android Start activity without creating new instance
假设我有活动A作为我的应用程序的根活动。 并形成这项活动我去活动B.
我希望能够从B返回到A而不创建活动A的新实例。
此代码位于活动B中
public void onBackPressed() {
super.onBackPressed();
// Intent intent= new Intent(getBaseContext(), MainActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
Intent myIntent = new Intent(getBaseContext(), MainActivity.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myIntent);
Log.d("Back", "TEST");
}
但它会在活动A上调用onCreate。 我想要做的是在活动b开始时以及完成切换回活动A时在后台使用A.
这是显而易见的
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main"
android:screenOrientation="unspecified"
android:launchMode="singleTask"
android:stateNotNeeded="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="@string/app_name"
android:name=".SubmenuActivty" >
</activity>
根据android活动生命周期,当你启动一个活动A:
生命周期方法清单:
Activity A.onResume();
Activity A.onStart();
Activity A.onCreate();
活动状态:
Activity A : Resumed
当您启动活动B时:
生命周期方法清单:
Activity A.onStop();
Activity B.onResume();
Activity B.onStart();
Activity B.onCreate();
Activity A.onPause();
...
...
...
活动状态:
Activity A : Stopped
Activity B : Resumed
当你再次启动A时:
生命周期方法清单:
Activity B.onDestroy();
Activity B.onStop();
Activity A.onResume();
....
....
....
活动状态:
Activity B : Destroyed
Activity A : Resumed
这是活动的生命周期:
你可以在这里找到详细信息
根据默认行为,活动A进入onStop()状态并且不活动,需要在返回活动A时创建新实例。我所知道的 - 没有办法保持A实例的存活。
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
尝试一下......它在没有新实例的情况下使旧活动成为现实......
你不需要做任何事情。 只需从Activity B中删除你的onBackPressed()
方法。
默认情况下,当您从活动A移动到活动B时 ,Android会将活动A添加到Backstack。 当您按活动B中的后退按钮或完成后,它会自动从后台恢复活动A.
如果您希望以编程方式完成活动B,请在需要时调用activity的finish()
方法。
试试这个
public void onBackPressed() {
super.onBackPressed();
Log.d("Back", "TEST");
}
这就是全部,你需要的。
使用moveTaskToBack(true);
public void onBackPressed() {
// TODO Auto-generated method stub
moveTaskToBack(true);
super.onBackPressed();
}
或者您也可以使用finish()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.