7

ユーザーが継続的にループしている 3 つのアクティビティがあります。ユーザーがメイン画面に戻ったら、以前の履歴を終了して、ユーザーが戻るボタンを押して画面 #2 に戻ることができないようにする必要があります。そのようなことを行う良い方法は何でしょうか? ところで-私は1.6(APIレベル4)を使用しています

繰り返しますが、元のビューにたどり着くまでの経路がわからない、または予測できないと言います。しかし、ロードしたら、ユーザーをそのビューに導いた履歴をクリアしたいと思います。2.0 では Activity#onBackPressed を上書きすることで可能ですが、1.6 ではそのようなものが必要です

4

2 に答える 2

1

私が知っているように、アクティビティの明確な履歴が必要な場合は、2 つの方法で行うことができます

(1)。manifest.xml ファイル内

AndroidManifest.xml ファイルからこれを実装することもできます。必要な属性にandroid:noHistory="true"属性を追加するだけです。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.rdc.activity"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="xx" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".PickGalleryImageActivity"
                  android:label="@string/app_name"
                  android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

(2)。Java コードで

アクティビティを開始するときにこのフラグを追加できますIntent.FLAG_ACTIVITY_NO_HISTORY

Intent intent = new Intent(this, SomeOtherClass.class);

// do not keep this intent in history
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

startActivity(intent);

もう 1 つは、例の下の [戻る] ボタンの突き刺しを探している場合に役立つ場合があります。

1.6 までの Android API レベルを探している場合。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     //todo here
     return true;
     }
     return super.onKeyDown(keyCode, event);    
}

それがあなたを助けることを願っています!!

于 2012-12-13T05:31:49.003 に答える
1

A、B、C の 3 つのアクティビティがあるとします。A がメイン画面で、ユーザーはこれら 3 つのページをループします。ただし、ユーザーが A を入力すると、onBackPresed イベントが終了として実行される必要があります。私はそれを明確にしますか?

このような状況で、B または C から A を開始しようとすると、 Intent.FLAG_ACTIVITY_CLEAR_TOP を Intent に追加すると、履歴スタックがクリアされ、スタックに A だけが残ります。

バック キー イベントをインターセプトする場合は、onBackPressed() をオーバーライドする必要はありません。このメソッドが使用可能になる前に、常に onKeyDown を使用します。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {

    }
    return super.onKeyDown(keyCode, event);
}
于 2012-12-13T07:27:45.123 に答える