为什么当我第二次在Android Studio中使用导航启动动作时,导航目的地丢失了?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么当我第二次在Android Studio中使用导航启动动作时,导航目的地丢失了?相关的知识,希望对你有一定的参考价值。
我在项目中使用导航。
[图像1将在应用程序启动时显示,在图像1中单击下一步按钮,将显示图像2,然后在图像2中单击返回按钮,将再次显示图像1。
现在,我再次单击图像1中的“下一步”按钮,应用程序崩溃,出现错误'此NavController未知的导航目标com.example.myapplication:id / actionTwo,'>>,为什么?
为什么NavHostFragment.findNavController(this).navigate(OneFrDirections.actionTwo())
无法第二次启动?
您可以在https://www.dropbox.com/s/1ad47eqi4iwig5v/MyNAV.zip?dl=0下载测试代码
my.xml
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/my" app:startDestination="@+id/One"> <fragment android:id="@+id/One" android:name="com.example.myapplication.OneFr" android:label="One"> <action android:id="@+id/actionTwo" app:destination="@id/Two" /> </fragment> <fragment android:id="@+id/Two" android:name="com.example.myapplication.TwoFr" android:label="Two"> <action android:id="@+id/actionOne" app:destination="@id/One" /> </fragment> </navigation>
OneFr.kt
class OneFr : Fragment() override fun onCreate(savedInstanceState: Bundle?) super.onCreate(savedInstanceState) override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = inflater.inflate(R.layout.one, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) super.onViewCreated(view, savedInstanceState) view.findViewById<Button>(R.id.btnNext).setOnClickListener NavHostFragment.findNavController(this).navigate(OneFrDirections.actionTwo())
TwoFr.kt
class TwoFr : Fragment() override fun onCreate(savedInstanceState: Bundle?) super.onCreate(savedInstanceState) override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? = inflater.inflate(R.layout.two, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) super.onViewCreated(view, savedInstanceState) // Handle back button press view.findViewById<Button>(R.id.btnBack).setOnClickListener fragmentManager?.popBackStack()
one.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btnNext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Next" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
two.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btnBack" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Back" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true" tools:context=".MainActivity"> <fragment android:id="@+id/fragment_container" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:defaultNavHost="true" app:navGraph="@navigation/my" /> </FrameLayout>
MainActivity.kt
class MainActivity : AppCompatActivity() override fun onCreate(savedInstanceState: Bundle?) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)
图像1
图像2
我在项目中使用导航。应用启动时将显示图像1,单击图像1中的“下一步”按钮,将显示图像2,然后单击图像2中的“后退”按钮,图像1将...
代替fragmentManager?.popBackStack()
,尝试
以上是关于为什么当我第二次在Android Studio中使用导航启动动作时,导航目的地丢失了?的主要内容,如果未能解决你的问题,请参考以下文章
核心图像过滤器的输出图像第二次在 UIImage 上运行时为零
当我第二次设置它的 ItemsSource 时,为啥这个选择器会崩溃?
为啥当我第二次使用完全相同的参数调用 IMMUTABLE 函数时,计划时间会加倍?