清除以前的部件活动
首先我加载启动活动A的应用程序,然后进入活动B,然后按我的主页按钮并加载Widget。点击该插件的按钮加载一个活动XXXX这是应用程序中的类,清除以前的部件活动
Intent searchDailog = new Intent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_LAUNCHER)
.setComponent(new ComponentName("com.af.screenmanager",
"com.af.screenmanager.XXXX"));
searchDailog.putExtra("ID", appWidgetIds);
searchDailog.putExtra("View", remoteViews);
searchDailog.setAction(ACTION_WIDGET_CONFIGURE);
searchDailog.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent configPendingIntent = PendingIntent
.getActivity(context, 0, searchDailog,
PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.widget_search_btn,
configPendingIntent);
也能正常工作,即“XXXX”类负荷。
但问题是,从这里,当我按下后退按钮“XXXX”活动关闭并显示活动B(屏幕从我按下主页按钮)。我不想查看它,而是必须转到主屏幕。
我认为加载的A和B活动存在于Activity堆栈中。那么我怎么能从小部件中清除堆栈。
最后我想出我的prblm。由于我的“XXXX”类Activity在同一个应用程序包中,因此它将加载到相同的应用程序堆栈中。即它将加载到以前的活动之上。
通过将
android:taskAffinity="af.searchActivity"
在“XXXX”类的清单导致的活性在一个单独的堆栈加载。
这个帮我。 http://developer.android.com/guide/topics/manifest/activity-element.html#aff
当你从另一个活动(即ActZ)推出一项新的活动(即ACT1),你不希望ActZ ACT1关闭时返回,只补充一点:你启动ACT1
ActZ.finish();
后。
这样,当ACT1结束(后退按钮按下就是最好的例子),它被恢复活性不ActZ肯定的,但它被称为ActZ(如您的主屏幕)的一个
在我的应用程序中,我想来回导航....所以不想完成。我想清除所有屏幕,当我从小部件 –
完成()将关闭中间活动(在你的例子中),而不是你的应用程序。当你需要重新开始中间活动时,它会在你向前迈进时被重新创建和终止,所以当你返回1步时,你将会在你的主屏幕 –
感谢你的建议..bt我已经解决了我的问题。 –
我面临同样的问题。当我点击小部件中的按钮时,它不会创建单个页面。我的活动堆栈不是空的。
最后,我把这个单行放在manifest文件中的一个activity标签中,然后它工作正常。
android:launchMode="singleInstance"
我确实认为这个解决方案过于复杂。只要学会有效地管理你的活动堆栈!你的情况不需要更多堆叠。 –
我知道这很复杂。该应用程序工作正常。我做了大量的Google搜索,但是这个soln修复了我的查询。 –