java - 带有偏好的 Osmdroid 夜间模式
问题描述
所以我想制作一个 CheckBoxPreference 来打开 osmdroid 中的夜间模式。但代码没有任何作用。我在没有 PreferenceScreen 的情况下做了同样的事情,一个带开关的普通 LinearLayout,效果很好,但我想使用偏好。有人知道,怎么了?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.allgemein);
final SharedPreferences sharedPreferences = this.getSharedPreferences("com.example.gruppen_app", Context.MODE_PRIVATE);
@SuppressLint("ResourceType") final CheckBoxPreference night_mode = (CheckBoxPreference) findPreference(this.getResources()
.getString(R.id.night_mode_btn));
night_mode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if(night_mode.isChecked()) {
sharedPreferences.edit().putBoolean("isChecked", true).apply();
map.getOverlayManager().getTilesOverlay().setColorFilter(TilesOverlay.INVERT_COLORS);
}else{
sharedPreferences.edit().putBoolean("isChecked", false).apply();
}
return false;
}
});
}
}
解决方案
@SuppressLint("ResourceType") final CheckBoxPreference night_mode = (CheckBoxPreference) findPreference(this.getResources()
.getString(R.id.night_mode_btn));
R.id 返回整数,而不是字符串。
这里:
public boolean onPreferenceChange(Preference preference, Object newValue)
你可以这样做:
boolean isChecked = Boolean.parseBoolean(String.valueOf(newValue));
然后只是:
sharedPreferences.edit().putBoolean("isChecked", isChecked).apply();
推荐阅读
- android - Android:在EditText中拖动正在拖动的视图时拖放错误
- python-3.x - 删除和编辑带有不和谐组件的消息/嵌入
- spring-boot - 使用wiremock测试webflux代码时出现500错误
- python-3.x - 我使用 PyTorch 收到此错误:RuntimeError:gather_out_cpu(): Expected dtype int64 for index
- pytorch - Torch mv 行为无法理解
- python - 将 .split() 应用于 pandas 数据帧时,RAM 崩溃
- oracle - 如何在 Oracle (19c) 中将数据和计数从列关联到行?
- javascript - 替换单击单选按钮上的文本,如果单击其他单选按钮,则将其更改回原始文本
- c# - Trim() 和 Replace(" ", "") 不删除 C# 中的空格
- actionscript-3 - 为什么构建 ANE 需要 Android Studio / Eclipse?