清除小部件中的先前活动

时间:2011-11-30 11:19:09

标签: android android-intent android-widget

首先我加载启动活动A的应用程序然后转到活动B.然后按我的主页按钮并加载小部件。单击窗口小部件中的按钮会加载活动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活动。那我怎么能从小工具中清除堆栈呢。

3 个答案:

答案 0 :(得分:0)

当您从另一个活动(即ActZ)启动新活动(即Act1)并且您不希望Act1关闭时ActZ返回时,只需添加以下内容:

ActZ.finish();

启动Act1后。

这样,当Act1结束时(按下后退按钮是一个主要的例子),恢复的活动肯定不是ActZ,而是调用ActZ的活动(就像你的主屏幕一样)

答案 1 :(得分:0)

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

最后,我将这一行放在活动标签中的清单文件中,然后就可以了。

android:launchMode="singleInstance"

答案 2 :(得分:-1)

最后我弄清楚了我的prblm。由于我的“XXXX”类Activity在同一个应用程序包中,因此它将加载到同一个应用程序堆栈中。即,它将加载到之前的活动之上。

通过

android:taskAffinity="af.searchActivity"
“XXXX”类清单中的

导致活动加载到单独的堆栈中。

这个对我有帮助。 http://developer.android.com/guide/topics/manifest/activity-element.html#aff