【问题标题】:How to set the value and item checked of a listpreference in an onchangelistener如何在 onchangelistener 中设置 listpreference 的值和项目检查
【发布时间】:2019-07-22 06:44:56
【问题描述】:

我在更新ListPreference 的值时遇到问题。 ListPreference.setDefaultValue()ListPreference.setIndexValue() 似乎不是公认的方法。

我想在他们的好友ListPreferences 之一被点击时“重置”所有其他ListPreferences,以便在任何给定时间只有其中一个具有有效值。

此外,XML 文件中的android:defaultValue="1" 似乎也不起作用,至少在视图中没有。 这只会改变实际值吗?它不检查第一个值吗?

ListPreferences 的行为与他们应该的行为不同,所以我确信 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
    }
  }
}

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

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

谢谢

【问题讨论】:

    标签: android kotlin preference listpreference


    【解决方案1】:

    findPreference(String) 是检索对您的ListPreferences 的引用的正确方法。问题是它返回了一个Preference 类型的变量,它是所有UI 设置组件的基类。 如果您需要访问仅对ListPreference 可用的功能,并且您确定该首选项是ListPreference(即,它在您的XML 文件中定义为ListPreference),您可以安全地转换它:

    val listPreference1 = findPreference("my_list_preference_1") as ListPreference
    

    这样,您应该能够使用特定于ListPreference 的方法:

    listPreference1.setValue("Whatever you'd like")
    

    请注意,这不是 Kotlin 特有的,这就是面向对象编程的工作方式:您只能在对象上调用由其接口定义的方法。如果要调用子类的方法,则需要断言该对象是该子类的实例(这就是我们所说的“强制转换”,在 Kotlin 中使用 as 语法完成)。

    另外,我建议你在onCreatePreferences 中调用findPreference,在setPreferencesFromResources(R.xml.prefs) 之后,否则你会得到一个NullPointerException

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 1970-01-01
      • 2011-07-09
      • 2018-10-29
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 2012-06-02
      • 2014-05-11
      相关资源
      最近更新 更多