Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从PreferenceScreen导航到另一个片段_Android_Kotlin_Navigation_Android Preferences_Android Architecture Navigation - Fatal编程技术网

Android 从PreferenceScreen导航到另一个片段

Android 从PreferenceScreen导航到另一个片段,android,kotlin,navigation,android-preferences,android-architecture-navigation,Android,Kotlin,Navigation,Android Preferences,Android Architecture Navigation,使用Android Jetpack的导航组件,我有一个MainActivity,其中包含4个不同的片段。其中一个片段是SettingsFragment,它具有xml文件中的首选项 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

使用Android Jetpack的导航组件,我有一个MainActivity,其中包含4个不同的片段。其中一个片段是SettingsFragment,它具有xml文件中的首选项

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory android:title="General settings">
        <PreferenceScreen
            android:summary="Choose an account from your list"
            android:title="Accounts">
            <intent android:action="@string/preferences_account_intent_action" />
        </PreferenceScreen>
    </PreferenceCategory>

    <PreferenceCategory android:title="User settings">
        <SwitchPreference
            android:defaultValue="true"
            android:enabled="true"
            android:key="user_show_notif_content"
            android:summaryOn="Show message content on new notification"
            android:summaryOff="Hide message content on new notification"
            android:title="Message content" />

        <PreferenceScreen
            android:key="gallery"
            android:summary="List of all the files of the application"
            android:title="Gallery">
        </PreferenceScreen>
    </PreferenceCategory>

</PreferenceScreen>

而setingsFragment扩展了Android的首选FragmentCompat。从所有其他片段中,我可以通过MainActivity中的findNavigation实用程序相互导航。 当我按下设置中的“Gallery”选项时,我想从SettingsFragment导航到GalleryFragment。 我已将GalleryFragment添加到MainActivity导航图中,并已将SettingsFragment连接到GalleryFragment,这将为导航器创建操作。但是我怎样才能赶上画廊点击事件呢?
有没有具体的方法可以做到这一点?

在您的设置片段中。添加首选项更改侦听器。然后在侦听器中添加导航代码 像这样的

        val preferenceGallery = preferenceManager.findPreference<Preference>("preferenceIDGallery")!!
        preferenceGallery.let {
            it.setOnPreferenceChangeListener { preference, newValue ->
                    val f = requireActivity().supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
                    val navController: NavController = f.navController //for fragment switch
                    navController.navigate(R.id.fragmentGallery)
                true
            }
        }
val preferenceGallery=preferenceManager.findPreference(“preferenceIDGallery”)!!
优先画廊{
it.setOnPreferenceChangeListener{首选项,newValue->
val f=requireActivity().supportFragmentManager.findFragmentById(R.id.nav_host_fragment)作为NavHostFragment
val navController:navController=f.navController//for fragment switch
导航控制器。导航(R.id.fragmentGallery)
真的
}
}

使用@Viatcheslav Ehrmann的答案,解决方案如下

<PreferenceScreen
            android:key="pref_gallery"
            android:summary="File list of application"
            android:title="Gallery" />

在我创建的设置片段中

preferenceManager.findPreference<Preference>("pref_gallery")?.let {
            it.setOnPreferenceClickListener {
                findNavController().navigate(SettingsFragmentDirections.actionSettingsFragmentToGalleryFragment())
                true
            }
        }
preferenceManager.findPreference(“pref_gallery”)?让{
it.setOnPreferenceClickListener{
findNavController().导航(设置FragmentDirections.actionSettingsFragmentToGalleryFragment())
真的
}
}