ここで奇妙な問題が発生しました。これが私のフラグメントの onCreateView です:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_game_question, container, false);
btnAnswerA = (Button) view.findViewById(R.id.btnAnswerA);
btnAnswerB = (Button) view.findViewById(R.id.btnAnswerB);
btnAnswerC = (Button) view.findViewById(R.id.btnAnswerC);
btnAnswerD = (Button) view.findViewById(R.id.btnAnswerD);
btnAnswerA.setOnClickListener(this);
btnAnswerB.setOnClickListener(this);
btnAnswerC.setOnClickListener(this);
btnAnswerD.setOnClickListener(this);
if(savedInstanceState != null) {
btnAnswerA.setVisibility(savedInstanceState.getInt(ANS_A_ENABLED_KEY));
btnAnswerB.setVisibility(savedInstanceState.getInt(ANS_B_ENABLED_KEY));
btnAnswerC.setVisibility(savedInstanceState.getInt(ANS_C_ENABLED_KEY));
btnAnswerD.setVisibility(savedInstanceState.getInt(ANS_D_ENABLED_KEY));
}
return view;
}
および onSaveInstanceState:
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(ANS_A_ENABLED_KEY, btnAnswerA.getVisibility());
outState.putInt(ANS_B_ENABLED_KEY, btnAnswerB.getVisibility());
outState.putInt(ANS_C_ENABLED_KEY, btnAnswerC.getVisibility());
outState.putInt(ANS_D_ENABLED_KEY, btnAnswerD.getVisibility());
super.onSaveInstanceState(outState);
}
ここで何が問題なのか: (savedInstanceState != null) ブロックでは、ボタンの可視性はまったく変化しません。手動で書いても - btnAnswerA.setVisibility(4) - 実行されません。ただし、Log コマンドを実行すると、savedInstanceState に必要な値が含まれていることがわかります。これを行う理由: ユーザーが画面を回転させたときにボタンの状態を保存する必要があります。
なぜそれが起こるのか、それを修正する方法について何かアイデアがあれば、私はとても感謝しています!