繁体   English   中英

如何在onchangelistener中设置列表首选项的值和检查的项目

[英]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语法完成)。

另外,我建议您打电话findPreferenceonCreatePreferences ,后setPreferencesFromResources(R.xml.prefs)否则你会得到likeky一个NullPointerException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM