首页 > 解决方案 > 如何在 onchangelistener 中设置 listpreference 的值和项目检查

问题描述

我在更新 a 的值时遇到问题ListPreferenceListPreference.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
    }
  }
}

我实际上并没有得到结果,因为我无法使用我需要的方法。

如果您需要任何其他信息,我会尽力提供更多信息。

谢谢

标签: androidkotlinpreferencelistpreference

解决方案


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,这就是面向对象编程的工作方式:您只能调用由其接口定义的对象上的方法。如果要调用子类的方法,则需要断言该对象是该子类的实例(这就是我们所说的“强制转换”,使用asKotlin 中的语法完成)。

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


推荐阅读