私はインテント フラグにあまり詳しくないので、ご容赦ください。
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);
}
}