Как отправить логическое значение между фрагментами с помощью кнопки переключения - PullRequest
0 голосов
/ 03 марта 2020

У меня есть два фрагмента, где от 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.

Извините, если я пропустил какой-то код. Я написал похожий код.

...