Как программно установить переключатель на непроверенный в зависимости от переключателя в PreferenceActivity? - PullRequest
0 голосов
/ 22 января 2020

У меня есть переключатель на вкладке в mainActivity и переключатель в настройках, которые должны быть связаны между собой. Переключатель в настройках должен установить ту же позицию во втором переключателе на вкладке. Код работает для включения, но не работает обратно (для выключения). Я понимаю, что ничего не происходит, когда выключатель выключен, и мне нужен слушатель, но я не знаю, как правильно его использовать. Как решить проблему?

настройки. xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
    <SwitchPreference
            android:key="pref_details"
            android:title="@string/details"
            android:summary="@string/details_summary"
            android:defaultValue="false">
    </SwitchPreference>
</PreferenceScreen>

MainActivity. xml:

<androidx.core.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Switch
        android:id="@+id/sw_pr"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checked="false"
        android:text="@string/textView17"
        android:textStyle="bold" />
</androidx.core.widget.NestedScrollView>

MainActivity. java:

public class  MainActivity extends AppCompatActivity {
    public static Boolean storeDet;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        SharedPreferences shp = PreferenceManager.getDefaultSharedPreferences(this);
        storeDet = shp.getBoolean("pref_details", false);
    ...
    }
    ... 
}

Tab1. java:

public class Tab1 extends Fragment {
    Switch sw_pr;
    Boolean sw_det;
    Boolean sw_det_flag;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        sw_pr = rootView.findViewById(R.id.sw_pr);

        // Attempt to determine switch value from Preferences: 
        sw_det = Boolean.parseBoolean(String.valueOf(MainActivity.storeDet));
        if (sw_det = true) {
            sw_pr.setChecked(true);
        } else {
            sw_pr.setChecked(false);
        }
        ...

        // Tab switch listener:
        sw_pr.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    res_new_pr.setVisibility(View.VISIBLE);
                } else {
                    res_new_pr.setVisibility(View.GONE);
                }
            }
        });
    }
        ...
}

1 Ответ

1 голос
/ 22 января 2020

Нет необходимости использовать = для сравнения логического значения. Используйте как показано ниже:

sw_det = MainActivity.storeDet;
if (sw_det) {
    sw_pr.setChecked(true);
} else {
    sw_pr.setChecked(false);
}
...