我有两个片段A
和B
,并且每当片段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中的其他解决方案,但是没有一个对我有用。
答案 0 :(得分:0)
@ianhanniballake我无法从第二个片段导航回来,这是我当前的问题。我很确定这不是一个循环,但是请让我编辑我的问题。 –
我从您的评论中得出的结论是,每当您尝试从片段B返回时,您都无法返回,但实际上并非如此,您的片段B导航回到片段A,并且无论何时从片段B onViewCreated
被调用,然后您的fetchData()
方法也被调用,并且您的逻辑保持不变,因此它再次导航到片段B。您可以更改逻辑或至少在某个按钮中调用fetchData()
听众。