在我的PoC中,我有一些活动,HomeActivity
,CreateActivity
,SearchActivity
,ResultsActivity
,ResultDetailsActivity
和UpdateActivity
。
我有两条主要的导航路径:创建和搜索。
创建路径的导航如下:HomeActivity
- > CreateActivity
- (完成后) - > HomeActivity
搜索的导航如下:HomeActivity
- > SearchActivity
- > ResultsActivity
(ListActivity
) - > ResultDetailsActivity
- > UpdateActivity
- (完成后) - > ResultDetailsActivity
(已更新数据)。
目前,通过Activity
方法导航到新的startActivity(intent)
。但是,这会导致每个Activity
的多个实例被打开。
我对Android很新。有人可以建议我如何避免这种情况吗?
答案 0 :(得分:29)
设置以下标志可以帮助您解决问题:
Intent.FLAG_ACTIVITY_CLEAR_TOP
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
答案 1 :(得分:24)
在您的Android清单中,将<activity>
android:launchMode="singleTask"
标记中
有关完整列表,请查看documentation of activity
在你的清单中:
<activity android:name=".YourActivity"
android:launchMode="singleTask"
android:label="@string/app_name" />
注意:不要使用单身。
答案 2 :(得分:7)
Intent
时使用startActivity
标志:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
旗帜有很多种。
这会有所帮助: android singleton activity
答案 3 :(得分:3)
管理活动的最佳形式是使用
startActivityForRestult(Intent,ID)
使用此方法调用活动,您的HomeActivity可以管理覆盖方法中其他活动的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
}
您可以为差异活动发送已知结果并进行管理。例如:
(Allways with startActivityForResult)
HomeActivity - &gt; SearchActivity - &gt; ResultsActivity(ListActivity) - &gt; ResultDetailsActivity - &gt; UpdateActivity - (完成时) - &gt; ResultDetailsActivity(带有更新的数据)。按Return键并发送SEARCH_FINISHED - &gt; UpdateActivity捕获此信息并在onActivityResult方法中发送相同的结果并完成() - &gt;与searchActivity相同 - &gt;家
这也可以帮到你:
Intent.FLAG_ACTIVITY_CLEAR_TOP
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/
答案 4 :(得分:1)
JoonSung Kim发布的答案很少添加,更改addFlag方法会抛出“无法解决错误”
更改:intent.addFlag(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
至:intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
代码应该是:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
要防止同一个Activity的多个实例更改标志
来自:intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
至:intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
代码应该是:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
答案 5 :(得分:0)
我的问题是setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
在Activity的onCreate(...)方法中。