如何根据 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);
}
我在 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);
}