Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 如果使用碎片管理器和导航控制器,碎片不可见_Android_Android Fragments_Kotlin_Android Architecture Navigation - Fatal编程技术网

Android 如果使用碎片管理器和导航控制器,碎片不可见

Android 如果使用碎片管理器和导航控制器,碎片不可见,android,android-fragments,kotlin,android-architecture-navigation,Android,Android Fragments,Kotlin,Android Architecture Navigation,我正在尝试用单个活动构建一个应用程序 在我的主片段中,一旦用户点击一个按钮,我需要在当前主片段中设置一个片段(使用片段管理器),同时导航到另一个片段(使用nav comp) 片段管理器代码: fragmentManager?.let { fragmentManager -> val fragment = ProtocolRunningCompaqFragment.newInstance() fragment.arguments = bund

我正在尝试用单个活动构建一个应用程序

在我的主片段中,一旦用户点击一个按钮,我需要在当前主片段中设置一个片段(使用片段管理器),同时导航到另一个片段(使用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>

....
问题是,当导航控制器执行导航时,当我按下后退箭头时,插入片段管理器的片段不可见,而
协议runningcompagfragment.isVisible
等于false

经过大量测试,我注意到如果我使用
commitNow()
而不是
commit()
,我可以看到插入的片段一秒钟,然后它执行导航。但是当我回来的时候,碎片是看不见的

它必须介于片段管理器和导航控制器之间,因为如果我注释掉导航控制器的代码,那么插入片段时不会出现任何问题


我对安卓系统有点陌生,所以,如果我做了一些野蛮的事情,很抱歉:)

我想我找到了答案

问题是我使用的是
fragmentManager
,而实际上我应该使用
childFragmentManager

正如我所理解的,
childFragmentManager
处理片段内部的片段:
返回一个私有片段管理器,用于在片段内部放置和管理片段。

所以现在它起作用了:

        val fragment = ProtocolRunningCompaqFragment.newInstance()
        fragment.arguments = bundle

        childFragmentManager
                .beginTransaction()
                .add(R.id.fragmentProtocolRunningCompaqContainer, fragment, PROTOCOL_RUNNING_COMPAQ_FRAGMENT_TAG)
                .commit()

你能展示onBackPressed()方法代码吗?我没有任何onBackPressed()方法,我应该有一个吗?当我按下后退按钮时,navController中的动画已正确完成。