导航组件片段不会返回到先前的片段

时间:2020-10-19 17:56:47

标签: android kotlin android-jetpack

我有两个片段AB,并且每当片段A开始时,我都会检查条件并将用户发送到片段B:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    fetchData()
}
private fun fetchData(){
    prefs = requireActivity().getSharedPreferences(UtilConstraints.sharePrefsName, Context.MODE_PRIVATE)
    nightMode=prefs.getBoolean(UtilConstraints.sharedPrefsNightMode,false)
    fMainNightModeSwitch.isChecked=nightMode

    if(!prefs.contains(UtilConstraints.sharedPrefsMyLang)){
        findNavController().navigate(R.id.action_mainFragment_to_selectLangFragment)
    }
}

然后在片段B中,单击按钮返回上一个:

    fSelectLangSaveSettings.setOnClickListener{
        if(otherLangs.size<3){
            Snackbar.make(
                fSelectLangContainer,
                "You Must Select Your Favorite Languages",
                Snackbar.LENGTH_SHORT
            ).show()
        }else {
            prefs.edit().clear().putString(UtilConstraints.sharedPrefsMyLang, currentLang).apply()
            Snackbar.make(
                fSelectLangContainer,
                "Languages Saved Successfully",
                Snackbar.LENGTH_SHORT
            ).show()
            findNavController().navigateUp()
        }
    }

这也是我的nav_graph

<fragment
    android:id="@+id/selectLangFragment"
    android:name="com.trinitytech.qtranslate.fragments.SelectLangFragment"
    android:label="fragment_select_lang"
    tools:layout="@layout/fragment_select_lang" >
    <action
        android:id="@+id/action_selectLangFragment_to_mainFragment"
        app:destination="@id/mainFragment"
        app:popUpToInclusive="true"
        app:popUpTo="@+id/mainFragment"/>
</fragment>
<fragment
    android:id="@+id/mainFragment"
    android:name="com.trinitytech.qtranslate.fragments.MainFragment"
    android:label="MainFragment" >
    <action
        android:id="@+id/action_mainFragment_to_selectLangFragment"
        app:destination="@id/selectLangFragment" />
</fragment>

问题是,仅当我尝试自动导航到片段B时,才会出现此问题,并且当我使用按钮单击导航到B时,它可以正常工作。

我也尝试了stackoverflow中的其他解决方案,但是没有一个对我有用。

1 个答案:

答案 0 :(得分:0)

@ianhanniballake我无法从第二个片段导航回来,这是我当前的问题。我很确定这不是一个循环,但是请让我编辑我的问题。 –

我从您的评论中得出的结论是,每当您尝试从片段B返回时,您都无法返回,但实际上并非如此,您的片段B导航回到片段A,并且无论何时从片段B onViewCreated被调用,然后您的fetchData()方法也被调用,并且您的逻辑保持不变,因此它再次导航到片段B。您可以更改逻辑或至少在某个按钮中调用fetchData()听众。