2009-11-17 10 views
7

私のユーザが連続してループしている3つのアクティビティがあります。ユーザーがメイン画面に戻るとき、私は前の履歴を終了して、ユーザーがボタンを押して画面#2に戻ることができないようにする必要があります。そのようなことを行うにはどうすればよいでしょうか? ご参考までに - 私は1.6(APIレベル4)を使用していますAndroid - アクティビティ間を移動するときの履歴をクリアする

私は元のビューに私を導くパスを知らないか、予測しません。しかし、私はそれを読み込むと、私はそのビューにユーザーを導いた歴史をクリアしたい。 2.0では、活動#onBackPressedを上書きで可能だが、私はあなたが活動のための明確な歴史をしたい場合は、二つの方法

(1)で行うことができます知っているように私は1.6

答えて

1

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

このような状況では、BまたはCからAを開始しようとすると、Intent.FLAG_ACTIVITY_CLEAR_TOPをインテントに追加すると、履歴スタックがクリアされ、スタックにAのみが表示されます。

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

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

    } 
    return super.onKeyDown(keyCode, event); 
} 
1

でそのようなものが必要。 Manifest.xmlファイルで

はまた、単に追加し、あなたのAndroidManifest.xmlファイルからアンドロイドをこれを実装することができます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)。あなたはIntent.FLAG_ACTIVITY_NO_HISTORY活動を起動すると、Javaコード

では、

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

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

startActivity(intent); 

そして、あなたは下の戻るボタンの串刺しを探している場合、他の一方は、このフラグを追加することができますあなたに役立つかもしれない

アンドロイドをお探しの場合api level upto 1.6

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

希望すると助かります!

関連する問題