如何根据 PreferenceActivity 中的开关以编程方式将开关设置为未选中状态?

How to programmatically set switch to unchecked depending on the switch in PreferenceActivity?

我在 mainActivity 中的 Tab 上有一个开关,在 Preference 中有一个开关,应该是互连的。设置中的开关应与选项卡上的第二个开关设置相同的位置。 该代码可以打开,但不能正常工作(关闭)。我知道开关关闭时什么也不会发生,我需要一个监听器,但我不知道如何正确使用它 如何解决问题?

settings.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);
                }
            }
        });
    }
        ...
}

不需要使用=来比较布尔值。像下面这样使用:

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