4

Activity画面の向きが変わったために再起動されたのか、それとも単にIntent到着したために再起動されたのかを検出するための適切な方法はありますか?

私のアプリケーションでは、FragmentActivity2つのを保持するがありますFragment。ユーザーは、タブFragmentを使用してこれらの間を移動できます。これには、選択するデフォルトのタブへのインジケーターを保持できるを運ぶことができるActionBarという規定もあります。したがって、開始時に、デフォルトで2つのタブのいずれかを選択できます。IntentActivityEXTRAActivityEXTRA

この問題は、ユーザーがデフォルトで選択されたタブから他のタブに移動したときに発生します。回転を変更すると、Activityが再開され、ユーザーが移動したタブを選択せず​​に、デフォルトのタブがEXTRA再度選択されるようになります。

4

2 に答える 2

4

選択したタブ名をonSaveInstanceStateを介して送信します

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("tabName", "tab1");
}

onCreateで値を取得します

if (savedInstanceState != null) {
            String tabname = savedInstanceState.getString("tabName");
        }
于 2012-09-11T11:32:39.867 に答える
-1

ユーザーが現在どのタブにいるかを示すグローバルフラグを作成します。

onPause()とメソッドでこれを更新しますonStop()

onStart()onRestart()メソッドから再度設定できます。

詳細については、http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycleを確認してください

画面の回転を処理するためのAndroidのデフォルトの方法が気に入らない場合は、自分の手で問題を処理できます。AndroidManifest.xmlファイルでアクティビティのandroid:ConfigChanges属性を設定します。

<activity android:name="com.myapp.MyActivity"
      android:label="@string/app_name"
      android:configChanges="orientation"
      >
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

ここで、android:configChangesの方向フラ​​グは、アクティビティが独自に回転を処理することをシステムに通知します。Androidは、代わりにアクティビティのonConfigurationChanged()メソッドを呼び出します。これにより、画面の回転を自分で処理できます。アクティビティを強制終了して再開することはなくなります。

于 2012-09-11T11:37:27.007 に答える