Как начать новое действие в каждом списке элементов в виджете приложения
У меня есть виджет приложения, который содержит макет 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);
Я думаю, что вы делаете это более сложным, чем нужно. Просто удалите все следующее:
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);