明確にするために、異なる向き (縦または横) を使用している複数のタブがあり、タブを切り替えて対応する向きを適切に設定するときに問題が発生していると言っていますか?
カタのコメントに応えて:
はい、画面を回転させるたびに、現在表示可能なアクティビティが破棄され、onCreate が再度呼び出されます (手順を思い出した場合)。タブを表す int 値を返す getCurrentTab() を呼び出し、onCreate が呼び出されたときにそれをアクティブなタブとしてリセットする必要があります。これはいくつかの方法で行うことができます...それを処理する小さなメソッドを作成して onCreate 経由で呼び出すか、onSaveInstanceState(Bundle) を使用して現在のデータを保存し、onRestoreInstanceState() を使用してタブ データをリロードします。
onCreate() で設定するのではなく、グローバル int (int currentTab = 0) を設定できます。onSaveInstanceState(Bundle) メソッドで、それを現在のタブに保存し (currentTab = getCurrentTab())、次に onRestoreInstanceState() で保存できます。再設定できます。
それは理にかなっていますか?
私はそれをテストしていませんが、これらの 2 つのメソッド呼び出しに慣れていない場合は、喜んでテストしたことを覚えておいてください。
以下はデータを Bundle に保存する例です。onCreate がそのアクティビティ バンドルをパラメーターとして受け入れることも思い出してください。
@Override
public void onSaveInstanceState(Bundle outState){
// Store UI state to the savedInstanceState.
// This bundle will be passed to onCreate on next call.
super.onSaveInstanceState(outState);
String strMinSec = timer.getText().toString();
String strMs = timerMs.getText().toString();
long curElapstedTime = elapsedTime;
boolean timerStopped = stopped;
int orientation = this.getResources().getConfiguration().orientation;
outState.putString("MinSec", strMinSec);
outState.putString("Ms", strMs);
outState.putLong("Elapsed", elapsedTime);
outState.putBoolean("Stopped", timerStopped);
outState.putInt("Orientation", orientation);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
// Restore UI state from the savedInstanceState.
if (savedInstanceState != null){
String MinSec = savedInstanceState.getString("MinSec");
if (MinSec != null)
{
timer.setText(MinSec);
}
String Ms = savedInstanceState.getString("Ms");
if (Ms != null)
{
timerMs.setText(Ms);
}
long elapsed = savedInstanceState.getLong("Elapsed");
if(elapsed > 0)
elapsedTime = elapsed;
int theOrientation = savedInstanceState.getInt("Orientation");
//if(theOrientation > 0)
//this.setRequestedOrientation(theOrientation);
}
}