【问题标题】:How to pass data between two PreferenceFragmentCompat classes?如何在两个 PreferenceFragmentCompat 类之间传递数据?
【发布时间】:2020-01-14 13:38:47
【问题描述】:

我想将 id 之类的数据传递给另一个 PreferenceFragmentCompat 类,以便我可以使用组 ID 配置该特定组。为了在 2 个首选项片段之间导航,您可以在首选项 xml 文件中或通过代码指定 app:fragment 并设置参数:

val bundle = Bundle()
bundle.putString("id", "group id")

val preference = Preference(context).apply {
    title = "group name"
    key = "key"
    fragment ="io.foodless.fragments.preferences.GroupPreference"
    arguments = bundle
}

但是在 GroupPreference 类中当我尝试访问参数 id 时返回 null

class GroupPreference:PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        setPreferencesFromResource(R.xml.group_preference,rootKey)

        val groupId = arguments?.getString("id")
        Log.d("debug","data $groupId")
    }
}

【问题讨论】:

    标签: android kotlin android-preferences


    【解决方案1】:

    在Preference.getExtras() 它说

    返回与此首选项关联的 extras Bundle 对象,如果当前没有,则创建一个新的 Bundle。您可以使用它来获取和设置单独的额外键/值对。

    因此,我没有创建一个新的 Bundle,而是调用了preference.getExtras() 并且它起作用了:

    val preference = Preference(context).apply {
        title = "group name"
        key = "key"
        fragment ="io.foodless.fragments.preferences.GroupPreference"
    
        val bundle = extras
        bundle.putString("id", "group id")
    }
    

    【讨论】:

    • 你还应该说明为什么onCreate 方法可以得到包
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    相关资源
    最近更新 更多