android - 如何在 onchangelistener 中设置 listpreference 的值和项目检查
问题描述
我在更新 a 的值时遇到问题ListPreference
。
ListPreference.setDefaultValue()
而且ListPreference.setIndexValue()
似乎不是公认的方法。
我想在单击ListPreference
其中一个好友时“重置”所有其他 s ListPreference
,以便在任何给定时间只有其中一个具有有效值。
此外,android:defaultValue="1"
XML 文件中的 似乎也不起作用,至少不在视图中。这只会改变实际值吗?它不检查第一个值吗?
s 表现得像他们应该做的ListPreference
那样,所以我确信 xml 文件是好的。我正在使用androidx,我已经实现了androidx.preference:preference:1.0.0
Class SettingsActivity : AppCompatActivity() {
Class SettingsFragment : PreferenceFragmentCompat() {
override fun onPreferenceCreated() {
setPreferencesFromResource(R.xml.prefs)
}
fun onCreate(savedInstances) {
val listPreference1 = findPreference(listpreference1)
val listPreference2 = findPreference(listpreference2)
listPreference1.setOnChangeListener { preference: Preference, newValue: Any ->
//listPreference2. <---- This is where the expected methods aren't showing. Not setDefaultValue, setValue, setIndexValue.
true ^setOnchangeListener
}
}
}
我实际上并没有得到结果,因为我无法使用我需要的方法。
如果您需要任何其他信息,我会尽力提供更多信息。
谢谢
解决方案
findPreference(String)
是检索对您ListPreference
的 s 的引用的正确方法。问题是它返回一个类型为 的变量Preference
,它是所有 UI 设置组件的基类。如果您需要访问仅对 可用的功能ListPreference
,并且您确定该首选项是 a ListPreference
(即,它ListPreference
在您的 XML 文件中定义为 a),您可以安全地转换它:
val listPreference1 = findPreference("my_list_preference_1") as ListPreference
这样,您应该能够使用特定于ListPreference
:
listPreference1.setValue("Whatever you'd like")
请注意,这并不特定于 Kotlin,这就是面向对象编程的工作方式:您只能调用由其接口定义的对象上的方法。如果要调用子类的方法,则需要断言该对象是该子类的实例(这就是我们所说的“强制转换”,使用as
Kotlin 中的语法完成)。
另外,我建议你findPreference
在onCreatePreferences
, 之后打电话setPreferencesFromResources(R.xml.prefs)
,否则你可能会得到一个NullPointerException
.
推荐阅读
- sql - sql 当我有一个包含多条记录的列的表时
- flutter - 如何通过颤振将导航器与isSelected一起使用
- java - Facebook Audience Network SDK 文件太大
- firebase - 从 Google Cloud 函数上传到 Firebase 存储
- xml - plsql dbms_xmlgen.getxmltype 更改 xml 标签格式
- reactjs - 如何使用 react.js 按钮修改特定的 Firestore 文档?
- floating-point - 将浮点数映射到字节
- c++ - c ++为向量中的每个字符串检查它是否包含子字符串
- javascript - 在 Vue 中选择/突出显示文本(在文本输入中)的最佳方法(使用计算属性的值和选择范围)
- python - 从 Python SQL 查询返回缺失的行