【发布时间】:2019-09-13 00:33:09
【问题描述】:
我正在尝试使用单个 Activity 构建应用。
在我的主片段中,一旦用户点击一个按钮,我需要在当前主片段中设置一个片段(使用片段管理器),同时我导航到另一个片段(使用 nav comp)
片段管理器代码:
fragmentManager?.let { fragmentManager ->
val fragment = ProtocolRunningCompaqFragment.newInstance()
fragment.arguments = bundle
val transaction = fragmentManager.beginTransaction()
fragmentManager
.beginTransaction()
.add(R.id.fragmentProtocolRunningCompaqContainer, fragment, PROTOCOL_RUNNING_COMPAQ_FRAGMENT_TAG)
.commit()
Log.d("FragmentManager", "count: ${fragmentManager.backStackEntryCount}")
}?: run {
Log.d("Error","The fragment manager is not available")
}
之后我在同一个线程中:
findNavController().navigate(directions)
这是主片段管理器的布局,我将新片段插入fragmentProtocolRunningCompaqContainer
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ProtocolListFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@drawable/black_border"
android:id="@+id/fragmentProtocolRunningCompaqContainer"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/progressBar">
</FrameLayout>
....
</FrameLayout>
问题是在导航控制器进行导航时,当我按下返回箭头时,使用片段管理器插入的片段不可见,protocolRunningCompagFragment.isVisible 等于 false
经过大量测试,我注意到如果我使用commitNow() 而不是commit(),我可以看到插入的片段一秒钟,然后它执行导航。但是当我回来时,片段是不可见的。
它必须是片段管理器和导航控制器之间的东西,因为如果我注释掉导航控制器的代码,片段插入没有问题。
我对 android 有点陌生,所以如果我在做一些野蛮的事情,对不起:)
【问题讨论】:
-
可以显示onBackPressed()方法代码吗?
-
我没有任何 onBackPressed() 方法,我应该有一个吗?当我按下后退按钮时,navController 中的动画是正确的。
标签: android android-fragments kotlin android-architecture-navigation