0

我有一个包含 ListView 布局的 App Widget。当我单击项目列表时,活动已打开,但如果我按下主页按钮并单击其他项目列表,则后台活动将再次打开。我希望每个项目列表打开一个新活动并关闭其他活动(如果已存在)。

WidgetProvider.class

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                R.layout.widgetnews);

        remoteViews.setImageViewBitmap(R.id.widgetTitle, buildUpdate("TITLE"));

        // Intent to item List
        Intent intentActivity;
        if(context.getResources().getBoolean(R.bool.tablet_full))
            intentActivity = new Intent(context, MainTabletFull.class); 
        else
            intentActivity = new Intent(context, MainSmartphone.class);
        intentActivity.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
        intentActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        intentActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intentActivity.setData(Uri.parse(intentActivity.toUri(Intent.URI_INTENT_SCHEME)));
        intentActivity.addCategory(Intent.CATEGORY_HOME);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, intentActivity, 0);
        remoteViews.setOnClickPendingIntent(R.id.widgetlogo, pendingIntent);
        remoteViews.setPendingIntentTemplate(R.id.widgetlist, pendingIntent);


        // Intent to Widget Logo
        Intent intent = new Intent(context, WidgetService.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
        intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
        remoteViews.setRemoteAdapter(R.id.widgetlist, intent);

        appWidgetManager.updateAppWidget(widgetId, remoteViews);

WidgetRemoteViewsFactory

@Override
public RemoteViews getViewAt(int position)
{
    RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget_noticias_row);

    remoteView.setTextViewText(R.id.wnr_date, "DATE");
    remoteView.setTextViewText(R.id.wnr_title, "TITLE");

    if(artigo.getId()!=null)
    {
        Intent intentActivity = new Intent();
        intentActivity.putExtra("ID_NOTIF", "ID");
        intentActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        remoteView.setOnClickFillInIntent(R.id.wnr_layout, intentActivity);
    }

    return remoteView;
}
4

2 回答 2

1

也许您正在寻找...

intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); // or intent.setFlags

或者

android:noHistory="true"

“当用户离开它并且它不再在屏幕上可见时,是否应该从活动堆栈中删除活动并完成(调用它的完成()方法)”-> http://developer.android.com/指南/主题/清单/activity-element.html#nohist

或者可能以在活动离开时直接调用 finish() 的方式工作。

另请参阅: 清除整个历史堆栈并在 Android 上启动新活动

Android:从后台堆栈中删除所有以前的活动

http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack

等等

我也看不到您所做的一切,但您以某种方式开始新任务,因此 FLAG_ACTIVITY_CLEAR_TASK 和 FLAG_ACTIVITY_NEW_TASK 可能没有意义,也可能没有意义。后堆栈上可能有多个不会被清除的任务。因此,您可能需要查看如何从清单启动所有活动以及代码中的所有意图。

如果您谈论重新打开相同的活动并刷新它,也可以使用上述内容和

intent = getIntent();
finish();
startActivity(intent);

Android刷新当前活动

于 2014-09-19T20:08:02.527 回答
1

我认为你让这比你需要的更复杂。只需删除以下所有内容:

    intentActivity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    intentActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intentActivity.setData(Uri.parse(intentActivity.toUri(Intent.URI_INTENT_SCHEME)));
    intentActivity.addCategory(Intent.CATEGORY_HOME);
于 2014-09-19T20:20:04.190 回答