Включить фрагмент в действие «Ящик навигации» - PullRequest
0 голосов
/ 14 июня 2019

Я создаю приложение и хочу включить фрагменты в пример действия «Ящик навигации» из Android.По умолчанию он генерирует мне макет activity_main, который включает макет app_bar_main с:

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

А внутри действия app_bar_main включает в себя другой макет в include:

<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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".UI.MainActivity">

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

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

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

<include layout="@layout/content_main"/>

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        app:srcCompat="@android:drawable/ic_dialog_email"/>

Проблема возникает, когда я помещаю свой Fragment в поле include:

    <include layout="@layout/content_main"/>

Заменяется на:

    <fragment
        android:name="com.example.urbandictionary.SearchFragment"
        android:id="@+id/fSearch"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

Я думал, что это должно работать, но оно ломается, когда оновходит в MainActivty:

        setContentView(R.layout.activity_main)

Похоже, ошибка пытается добавить что-то в main thread к некоторому List:

    public void registerOnActivityPausedListener(Activity activity,
        OnActivityPausedListener listener) {
    synchronized (mOnPauseListeners) {
        ArrayList<OnActivityPausedListener> list = mOnPauseListeners.get(activity);
        if (list == null) {
            list = new ArrayList<OnActivityPausedListener>();
            mOnPauseListeners.put(activity, list);
        }
        list.add(listener);
    }
}

И прерывается, когда он сделалlist.add(listener)

Журналы:

2019-06-14 11: 39: 52.350 15257-15257 / com.example.urbandictionary E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.example.urbandictionary, PID: 15257 java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.example.urbandictionary / com.example.urbandictionary.UI.MainActivity}: android.view.InflateException: строка двоичного файла XML № 12:Строка # 26 двоичного XML-файла: Ошибка надувания класса fragment в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2665) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2726) в android.app.ActivityThread.-wrap12 (ActivityThread.java) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1477) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main(ActivityThread.java:6126) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776) Вызывается: android.view.InflateException: строка двоичного файла XML # 12: строка двоичного файла XML # 26: ошибка раздувания фрагмента класса. Вызывается: android.view.InflateException: двоичный файл XMLстрока № 26: ошибка надувания фрагмента класса. Причина: java.lang.RuntimeException: com.example.urbandictionary.UI.MainActivity@83a791c должна реализовывать OnFragmentInteractionСлушатель в com.example.urbandictionary.SearchFragment.onAttach (SearchFragment.kt: 58) в android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1404) в android.support.v4.app.FragmentManagerompl.m.FragmentManager.java:1684) в android.support.v4.app.FragmentManagerImpl.addFragment (FragmentManager.java:1930) в android.support.v4.app.FragmentManagerImpl.onCreateView (FragmentManager.java:3745ort) в android.su4su.app.) в android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:777) в android.view.LayoutInflater.createViewFromTag (LayoutInflater.java:727) в android.view.LayoutInflater.rInflate (LayoutInflater.java: at8: android8).LayoutInflater.rInflateChildren (LayoutInflater.java:821) в android.view.LayoutInflater.parseInclude (LayoutInflater.java:994) в android.view.LayoutInflater.rInflate (LayoutInflater.java:854) в android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:821ayayfla.flain (flainInfla.LateInfla.LateInfla.LayInInter.LateInfla.LayInInter.LateInfla.LayInInter.LateInfla.LayInInter.LateInfla.LayInInter.LateInflater.viewIn.ter.Interin.flater (inline.flater (view)..java: 518) в android.view.LayoutInflater.inflate (LayoutInflater.java:426) в android.view.LayoutInflater.inflate (LayoutInflater.java:377) в android.support.v7.app.AppCompatDelegateImpl.setConlmpl.Java: 469)на android.support.v7.app.AppCompatActivity.setContentView (AppCompatActivity.java:140) в com.example.urbandictionary.UI.MainActivity.onCreate (MainActivity.kt: 21) на android.app.Activity.performCreate (Activity.java:6679) на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1119) на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2618) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2726) на android.app.ActivityThread.-wrap12 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1477) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:154) на android.app.ActivityThread.main (ActivityThread.java:6126) в java.lang.reflect.Method.invoke (родной метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)

...