Как изменить фрагменты в пейджере представления, размещенном в Навигаторе - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть приложение для Android с навигационным ящиком. При щелчке по каждому элементу ящика отображаются два фрагмента, размещенные в макете просмотра и вкладке. Я не могу переключаться между выбранными элементами ящика навигации, поскольку он вызывает исключение IllegalStateException.
Я не могу понять, почему, поскольку content_main является хостом макета.

Код для смены фрагментов:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_main, fragment);
ft.commit();


Код XML для app_bar_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:id="@+id/coordinator_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF"
tools:context=".activities.MainActivity">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay"

    >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar_main"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        app:tabGravity="fill"
        app:tabIndicatorColor="@color/colorAccent"
        app:tabIndicatorHeight="3dp"
        app:tabMode="fixed"
        app:tabSelectedTextColor="@color/colorAccent"
        app:tabTextColor="#FFFFFF" />

</android.support.design.widget.AppBarLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:layout_marginTop="108dp">

    <include layout="@layout/content_main" />
</android.support.v4.view.ViewPager>


Код XML для content_main.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:id="@+id/content_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".activities.MainActivity"
tools:showIn="@layout/app_bar_main">



Дамп сообщения об ошибке из LogCat:

2018-11-14 14:19:22.741 27690-27690/com.lomakuit.phwandoorganiser     E/FragmentManager: No view found for id 0x7f08008a (com.lomakuit.phwandoorganiser:id/content_main) for fragment TicketCollectorsFragment{570be2e #3 id=0x7f08008a}
2018-11-14 14:19:22.741 27690-27690/com.lomakuit.phwandoorganiser E/FragmentManager: Activity state:
2018-11-14 14:19:22.788 27690-27690/com.lomakuit.phwandoorganiser E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.lomakuit.phwandoorganiser, PID: 27690
java.lang.IllegalArgumentException: No view found for id 0x7f08008a (com.lomakuit.phwandoorganiser:id/content_main) for fragment TicketCollectorsFragment{570be2e #3 id=0x7f08008a}
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1454)
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
    at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
    at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
    at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)


Я не уверен, как я могу переключаться между фрагментами.
enter image description here enter image description here

1 Ответ

0 голосов
/ 16 ноября 2018

your_activity.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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".activities.MainActivity"
tools:showIn="@layout/app_bar_main">


<android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/content_main">
    </android.support.constraint.ConstraintLayout>

Как то так. Ваш идентификатор content_main (некоторый макет) должен храниться внутри действия, которое вы хотите заменить (не идентификатор вашего родительского макета xml [как вы могли бы вызвать из него несколько фрагментов?]).

...