清除以前的部件活动

清除以前的部件活动

问题描述:

首先我加载启动活动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

+0

我确实认为这个解决方案过于复杂。只要学会有效地管理你的活动堆栈!你的情况不需要更多堆叠。 –

+0

我知道这很复杂。该应用程序工作正常。我做了大量的Google搜索,但是这个soln修复了我的查询。 –

当你从另一个活动(即ActZ)推出一项新的活动(即ACT1),你不希望ActZ ACT1关闭时返回,只补充一点:你启动ACT1

ActZ.finish(); 

后。

这样,当ACT1结束(后退按钮按下就是最好的例子),它被恢复活性不ActZ肯定的,但它被称为ActZ(如您的主屏幕)的一个

+0

在我的应用程序中,我想来回导航....所以不想完成。我想清除所有屏幕,当我从小部件 –

+0

完成()将关闭中间活动(在你的例子中),而不是你的应用程序。当你需要重新开始中间活动时,它会在你向前迈进时被重新创建和终止,所以当你返回1步时,你将会在你的主屏幕 –

+0

感谢你的建议..bt我已经解决了我的问题。 –

我面临同样的问题。当我点击小部件中的按钮时,它不会创建单个页面。我的活动堆栈不是空的。

最后,我把这个单行放在manifest文件中的一个activity标签中,然后它工作正常。

android:launchMode="singleInstance"