[英]How to avoid multiple instances of same Activity?
在我的PoC中,我有一些活动, HomeActivity
, CreateActivity
, SearchActivity
, ResultsActivity
, ResultDetailsActivity
和UpdateActivity
。
我有两个主要的导航路径: 创建和搜索 。
创建路径的导航如下: HomeActivity
- > CreateActivity
- (完成时) - > HomeActivity
搜索导航如下: HomeActivity
- > SearchActivity
- > ResultsActivity
( ListActivity
) - > ResultDetailsActivity
- > UpdateActivity
- (完成时) - > ResultDetailsActivity
(带有更新的数据)。
目前,通过startActivity(intent)
方法导航到新的Activity
。 但是,这会导致打开每个Activity
多个实例。
我对Android很新。 有人可以建议我怎么能避免这个?
设置以下标志可以帮助您解决问题:
Intent.FLAG_ACTIVITY_CLEAR_TOP
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
在你的Android清单中,添加到你的<activity>
标签android:launchMode="singleTask"
有关完整列表,请查看活动文档
在你的清单中:
<activity android:name=".YourActivity"
android:launchMode="singleTask"
android:label="@string/app_name" />
注意:不要使用单身人士。
在startActivity
时使用Intent
标志:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
旗帜有很多种。
这将是有用的: android单例活动
管理活动的最佳形式是使用
startActivityForRestult(意图,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 - > SearchActivity - > ResultsActivity(ListActivity) - > ResultDetailsActivity - > UpdateActivity - (完成时) - > ResultDetailsActivity(带有更新的数据)。 按Return键并发送SEARCH_FINISHED - > UpdateActivity捕获此信息并在onActivityResult方法中发送相同的结果并完成() - >与searchActivity相同 - >主页
这也可以帮到你:
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/
JoonSung Kim发布的答案很少添加,更改addFlag方法会抛出“无法解决错误”
更改: intent.addFlag(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
to: 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);
to: intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
代码应该是:
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
我的问题是setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
在onCreate(...)Activity方法中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.