Как начать новое действие в каждом списке элементов в виджете приложения

У меня есть виджет приложения, который содержит макет ListView. Когда я нажимаю на список элементов, действие открывается, но если я нажимаю кнопку "Домой" и нажимаю на другой список элементов, действие в фоновом режиме снова открывается. Я хочу, чтобы каждый список элементов открывал новую активность и закрывал другую активность, если она уже существует.

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;
}

2 ответа

Решение

Возможно, вы ищете...

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

или же

android:noHistory="true"

"Должно ли действие быть удалено из стека действий и завершено (вызывается его метод finish()), когда пользователь отходит от него и его больше не видно на экране" -> http://developer.android.com/ руководство / темы / манифест / активность-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 обновляет текущую активность

Я думаю, что вы делаете это более сложным, чем нужно. Просто удалите все следующее:

    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);
Другие вопросы по тегам