У меня есть два фрагмента, где от Fragment A
я могу go до Fragment B
. В Fragment A
у меня есть switch
, который я сохраняю в SharedPreferences
. И Fragment B
есть кнопка, которая также меняет эти SharedPreferences
. Проблема в том, что когда я возвращаюсь обратно к Fragment A
, проверяется switch
.
Есть Fragment A
private boolean isActive = false;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_a, container, false);
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
mEditor = mSharedPreferences.edit();
mSwitchCompat = view.findViewById(R.id.switch);
isActive = mSharedPreferences.getBoolean("active", false);
buttonGoToFragmentB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Fragment_B fragment_b = new Fragment_B();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_f, fragment_b, "Fragment_B");
ft.addToBackStack(null);
ft.commit();
}
});
if (isActive){
mSwitchCompat.setChecked(true);
} else {
mSwitchCompat.setChecked(false);
}
mSwitchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (mSwitchCompat.isChecked()) {
mEditor.putBoolean("active", true);
mEditor.apply();
isActive = true;
} else {
mEditor.putBoolean("active", false);
mEditor.apply();
isActive = false;
}
}
});
return view;
}
Есть Fragment B
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_b, container, false);
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
mEditor = mSharedPreferences.edit();
buttonDone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mEditor.putBoolean("active", false);
mEditor.apply();
getActivity().getSupportFragmentManager().popBackStack();
}
}
});
return view;
}
Мне нужно отправить логическое значение как ложное на Fragment A
. Но когда Fragment A
воссоздается, setOnCheckedChangeListener
начинается снова, и логическое значение меняется на true.
Извините, если я пропустил какой-то код. Я написал похожий код.