12

アプリが最初のアクティビティに戻り、(ほぼ) 再起動されたかのように動作するボタンを実装しようとしています。このコード

Intent newIntent =
        new Intent(currentActivity.getApplicationContext(), StartActivity.class);
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + Intent.FLAG_ACTIVITY_CLEAR_TASK);
currentActivity.startActivity(newIntent);

Android 4.1 を実行している新しいタブレットでは正常に動作しているようですが、Android 2.3.4 を実行している古いデバイスでは動作しません。

これに関するいくつかのスレッドを見つけました:

Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK が動作しない Android

タスクのすべてのアクティビティをクリアしますか?

細かい活字を読むと、android-support-v4.jar、 http: //developer.android.com/reference/android/support/v4/content/IntentCompat.html の IntentCompat クラスを使用する必要があると思います。

残念ながら、ドキュメントには例が含まれておらず、IntentCompat をどのように使用すればよいかよくわかりません。私が見つけた唯一の例はこれです: Android 2.3 で MainActivity を開始しないでください

これは、私がこのようなことをすべきだと私に信じさせます:

    Intent newIntent = IntentCompat.makeRestartActivityTask(cn);

しかし、これにより、「makeRestartActivityTask」は未定義のシンボルであるというコンパイラ エラーが発生します。

これは、ビルド環境 (IntelliJ IDEA 12 コミュニティ エディション) に android-support-v4.jar を正しく追加していないことを意味していると推測していますが、いくつかの異なる方法でそれを試しましたが、まだ機能しません。 .

だから私は2つの質問があります:

  1. 私が試みた IntentCompat の使用法は正しいように見えますか?

  2. 「makeRestartActivityTask」が未定義のシンボルであるとコンパイラに言わせないようにするにはどうすればよいですか?

4

3 に答える 3

21

これが私がIntentCompatを使用している方法です

    Intent intentToBeNewRoot = new Intent(this, MainActivity.class);
    ComponentName cn = intentToBeNewRoot.getComponent();

    Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);

    startActivity(mainIntent);

これにより、不要になったタスク ルートが MainActivity に効果的に置き換えられます。Gingerbeard と ICS で動作します。「未定義のシンボルです」というメッセージは表示されませんでした。

于 2013-10-11T09:28:18.493 に答える