私は2つのフラグメントを持っています。
FirstFragmentにはボタンしかありません。ユーザーがボタンを押すと、SecondFragmentが表示されます。
両方のフラグメントがバックスタックにあります。したがって、SecondFragmentが表示されているときに、ユーザーが物理的な戻るボタンを押すと、FirstFragmentが表示されます。
この時点ですべてが正常に機能します。
次に、SecondFragmentレイアウトで、次を追加しましたToggleButton
。
<ToggleButton
android:id="@+id/my_toggle"
android:checked="false"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="@string/on"
android:textOff="@string/off"
/>
私のSecondFragment.java :
public class SecondFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle){
super.onCreateView(inflater, container, savedInstanceState);
//My Toggle Button
myToggleBtn.setOnCheckedChangeListener(
new CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
Log.v("*TOGGLE CHECK CHANGED*",String.valueOf(isChecked));
if(isChecked){
//DO SOME THING
}else{
//DO SOMETHING ELSE
}
}
});
return inflater.inflate(R.layout.second_layout, null);
}
...
@Override
public void onDestroy(){
super.onDestroy();
//Set my toggle button to unchecked status,when leave this fragment
myToggleBtn.setChecked(false);
}
}
トグル ボタンはSecondFragmentで正常に動作します。しかし、トグルボタンを押してチェックすると(チェックされた状態に変わったので)、物理的な戻るボタンを押してFirstFragmentに戻ります(onDestroy()が呼び出され、トグルボタンがチェックされていない状態に設定されます)。 SecondFragment も驚くべきことに、現時点ではToggleButton
実行時にチェックされ、LogCat から気づいたのですが、OnCheckedChangeListener()
実行時にも呼び出されます。なぜですか?
PS: LogCat は、SecondFragment を離れるときに onDestroy() が呼び出されることを示しています