Android の Fragment 状態に問題があります。3 つのシークバーを含むフラグメントがあります。フラグメントの下部にはボタンがあり、これを使用して次のフラグメントに進みます (フラグメントトランザクションを使用)。現在、この「次へ」ボタンは、フラグメントが最初に作成されたときに無効になっています。ユーザーが次のフラグメントに進む前に、最初に 3 つのシークバーを使用するようにします。これはすべてうまくいきます。ただし、場合によっては、ユーザーは戻るボタンを使用して前の質問/フラグメントに戻ることができます。残念ながら、戻るボタンを押すと、「次へ」ボタンの状態が再び無効に設定されます。私が知る限り、Android はビューの状態を自動的に保存する必要があるため、これは非常に奇妙です。実際のところ、Android はシークバーの状態 (位置) を保存します。
Android がシークバーの状態を保存するのに、ボタンの状態を保存しないのはなぜですか? ボタンは XML で無効になっているため、onCreate などでプログラムで変更することはありません。
Android がボタンの状態 (有効/無効) を記憶できない理由を知っている人はいますか? もう何日も頭がおかしくなっています...
ところで: onSaveInstanceState メソッドを使用してバンドル内にボタンの状態を保存しようとしましたが、onSaveInstanceState() メソッドは呼び出されません (したがって、onCreate ではバンドルは常に空です!)
編集:
私のコードのビット。まず、ボタンを有効にする方法 (正常に動作します):
public void onStartTrackingTouch(SeekBar seekBar) {
seekBar.setTag(true);
}
public void onStopTrackingTouch(SeekBar seekBar) {
if (happyBar.getTag().equals(true) && relaxedBar.getTag().equals(true) && awakeBar.getTag().equals(true)) {
nextButton.setEnabled(true);
}
}
そして、これが次のフラグメントに遷移する方法です:
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.fragmentcontainer, fragment);
ft.addToBackStack(null);
ft.commit();
ボタンの初期状態は、XML で enabled=false に設定されています。Eclipseによると、ボタンの有効なXMLプロパティは非推奨であると言わざるを得ませんが、非推奨ではないため、インターネットでバグであると読みました。だからこそ、使い続けています。
お役に立てれば!