Переход от одного фрагмента к другому в Котлине

Пытаюсь перейти от фрагмента к основному фрагменту. Компилятору не нравится мой код, но я не уверен, в чем проблема. Как лучше всего переносить фрагменты?

// Это xml основного фрагмента, к которому я хочу перейти

<FrameLayout 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"
             tools:context=".MapFragment"
             android:id="@+id/mapFragment">

    <fragment
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/maps"
    />




val fragment = Fragment(R.id.mapFragment)

                fragmentManager
                    ?.beginTransaction()
                    ?.setCustomAnimations(R.anim.abc_fade_in, 
                    R.anim.abc_fade_out)
                    ?.replace(R.id.nav_host_fragment, fragment)
                    ?.commit()

2019-07-12 17: 49: 45.091 9594-9594 / com.example.cribb E / Android Время выполнения: FATAL EXCEPTION: основной процесс: com.example.cribb, PID: 9594 android.content.res.Resources $ NotFoundException: ID ресурса # 0x7f0800ae тип # 0x12 недействителен в android.content.res.Resources.loadXmlResourceParser (Resources.java:2161) в android.content.res.Resources.getLayout (Resources.java:1155) в android.view.LayoutInflater.inflate (LayoutInflater.java:421) в androidx.fragment.app.Fragment.onCreateView (Fragment.java:1651) в androidx.fragment.app.Fragment.performCreateView (Fragment.java:2595) в androidx.fragment.app.FragmentManagerImpl. moveToState (FragmentManagerImpl.java:881) на androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState (FragmentManagerImpl.java:1238) в androidx.fragment.app.FragmentManagerImpl.moveToState (FragmentManagerImpl.moveToState (FragmentManager) .execut eOps (BackStackRecord.java:439) в androidx.fragment.app.FragmentManagerImpl.executeOps (FragmentManagerImpl.java:2076) в androidx.fragment.app.FragmentManagerImpl.executeOpsTogether (FragmentManagerImpl.javax.fragment.java.fragment.java.fragment.java:18fragment. .removeRedundantOperationsAndExecute (FragmentManagerImpl.java:1821) в androidx.fragment.app.FragmentManagerImpl.execPendingActions (FragmentManagerImpl.java:1727) в androidx.fragment.app.FragmentManagerImpl.java.Runos (android) в androidx. .handleCallback (Handler.java:873) в android.os.Handler.dispatchMessage (Handler.java:99) в android.os.Looper.loop (Looper.java:193) в android.app.ActivityThread.main (ActivityThread. java: 6669) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) в com.android.internal.os.Zyg oteInit.main (ZygoteInit.java:858)


person Daniel Li    schedule 12.07.2019    source источник


Ответы (1)


Проблема в том, что вы используете тег <fragment> в своем XML, если вы определяете свой фрагмент в XML с помощью тега <fragment>, вы не сможете использовать replace и изменить свой фрагмент. Замена

 <fragment
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/maps"
/>

с участием

 <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/maps"
/>

Должен сделать свое дело.

person Lee Boon Kong    schedule 13.07.2019