[英]How to set the value and item checked of a listpreference in an onchangelistener
我在更新ListPreference
的值时遇到问题。 ListPreference.setDefaultValue()
和ListPreference.setIndexValue()
似乎不是公认的方法。
我想在单击其好友的ListPreference
之一时“重置”所有其他ListPreference
,以便在任何给定时间只有其中一个具有有效值。
另外,XML文件中的android:defaultValue="1"
似乎也不起作用,至少在视图中不起作用。 这只会改变实际值吗? 它也不会检查第一个值吗?
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
的引用的正确方法。 问题是它返回类型为Preference
的变量,这是所有UI设置组件的基类。 如果您需要访问只能用于ListPreference
,并且可以确保该首选项是ListPreference
(即,它在XML文件中定义为ListPreference
),则可以安全地对其进行ListPreference
转换:
val listPreference1 = findPreference("my_list_preference_1") as ListPreference
这样,您应该能够使用特定于ListPreference
:
listPreference1.setValue("Whatever you'd like")
请注意,这不是Kotlin特有的,这就是面向对象编程的工作方式:您只能在由其接口定义的对象上调用方法。 如果要调用子类的方法,则需要断言该对象是该子类的实例(这就是我们所说的“ cast”,在Kotlin中使用as
语法完成)。
另外,我建议您打电话findPreference
在onCreatePreferences
,后setPreferencesFromResources(R.xml.prefs)
否则你会得到likeky一个NullPointerException
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.