我对意图标志不是很熟悉,所以请多多包涵。
我正在做一个应用程序,它在 ViewPager 中显示数据库中的内容。我还有一个小部件,它不时拉出一个随机行并显示它。现在,当我单击它时,我会进入一个显示相同内容的活动,现在我可以对其采取行动。
一切正常,但是当我已经运行了一个活动然后单击小部件时,它似乎创建了一个新实例,因为当我按下后退按钮时,我没有退出应用程序,而是被带到前一个实例或其他东西。
有没有办法启动一个新的活动实例,如果有一些以前的实例运行关闭它们,使用标志?
我玩过 CLEAR_TOP 之类的东西,但老实说我不知道我在做什么。
谢谢!
//编辑
Intent.FLAG_ACTIVITY_CLEAR_TOP 似乎没有做任何事情。Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP 似乎将前一个带到顶部而忽略了新的或其他东西。也许让我换个说法,我从启动器图标开始活动,然后按主页按钮并单击小部件,它应该会打开一个新实例,其中 ViewPager.setCurrentItem 设置正确的页面(与小部件中相同)。如果之前没有运行主要活动,一切都很好,但如果它正在运行,则完成它。
MyWidgetProvider extends AppWidgetProvider
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.d("MainActivity", "MyWidgetProvider # onUpdate");
for (int i = 0; i < appWidgetIds.length; i++) {
int appWidgetId = appWidgetIds[i];
Intent intent = new Intent(context, MainActivity.class);
intent.putExtra("from_widget", true);
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setOnClickPendingIntent(R.id.widget_container, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}