相关疑难解决方法(0)

我们可以使用带有设置首选项的 Android Jetpack 导航组件吗?

是否可以使用 Android Jetpack 导航组件来导航设置首选项的片段?我有一个带有多个嵌套首选项片段的设置屏幕。我想知道使用 Android Jetpack 导航组件来简化我的任务是否可行?

android android-preferences kotlin android-jetpack-navigation

11
推荐指数
1
解决办法
1522
查看次数

结合使用NavController和首选项

我目前正在将应用程序迁移到androidX和新的导航组件。我的应用程序具有彼此嵌套的不同设置屏幕。在androidX之前,PreferenceScreen它们彼此嵌套。现在,这被处理为:

<Preference
    app:fragment="com.example.SyncFragment"
    .../>
Run Code Online (Sandbox Code Playgroud)

因此,在XML中,我们PreferenceFragmentCompat通过单击该首选项为要显示的类提供一个绝对的类名。片段事务必须由保存片段的Activity来实现。我很乐意这样做,NavControler但这是我的问题:

override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean {
    val nav = Navigation.findNavController(this, R.id.nav_host_fragment)
    nav.navigate(<Fragment ID>) // Only int IDs can be passed here
    return true
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以给pref我通过此回调获得的引用ID,以便我可以使用来处理片段事务NavControler?还是我在这里使事情复杂化而错过了什么?

android android-navigation androidx

7
推荐指数
0
解决办法
128
查看次数

PreferenceFragments 不在同一个 FragmentManager 中?

我们有一个PreferenceFragmentCompat,然后点击一个首选项,我们想从当前的 切换PreferenceFragmentCompat到新的PreferenceFragmentCompat。(在新屏幕上进行某些设置)。

但是,无论我们尝试过什么,我们都会遇到以下错误:

Fragment 声明的目标片段不属于此 FragmentManager

主活动.kt

class MainActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsResultCallback, PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val navView: BottomNavigationView = findViewById(R.id.nav_view)

        val navController = findNavController(R.id.nav_host_fragment)
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_preferences
            )
        )

        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)
    }

    override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean {
        val …
Run Code Online (Sandbox Code Playgroud)

mobile android fragment kotlin fragmentmanager

3
推荐指数
1
解决办法
366
查看次数