Android при падении раздувает поведение - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь добавить нижний лист в одно из моих приложений.Я знаю, как их использовать, и я реализовал один, следуя среднему учебнику (и читая проблемы, которые были у людей в Stack Overflow), который прекрасно работает.

Но когда я пытаюсь повторить это в моем проекте, он сохраняетсбой, неважно, положу ли я его в основное действие или внутри фрагмента.Это сводит меня с ума, так как он падает, даже если я копирую те же самые xmls и процедуру из примера, который у меня работает.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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">

<!-- Toolbar -->
<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppBarOverlay">

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

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

<!-- Fragment -->
<FrameLayout
    android:id="@+id/main_screen_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="?android:attr/actionBarSize"/>

<!-- Bottom navigation view -->
<android.support.design.widget.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:itemBackground="@color/colorPrimary"
    app:itemIconTint="@color/colorGreyLight"
    app:itemTextColor="@color/colorGreyLight"
    android:layout_gravity="bottom"
    app:menu="@menu/bottom_menu" />

Этот frameLayout заполняется несколькими фрагментами моего приложения, например так:

private fun showNewFragment(fragmentToShow: Fragment, addToBackStack: Boolean = true) {
    try {
        if (activity.supportFragmentManager != null) {
            activity.supportFragmentManager.popBackStack(null,
                    FragmentManager.POP_BACK_STACK_INCLUSIVE)

            val fragmentManager = activity.supportFragmentManager
            val transaction = fragmentManager.beginTransaction()
            transaction.setTransition(FragmentTransaction.TRANSIT_NONE)
            transaction.replace(fragmentPlaceholder, fragmentToShow)

            if (addToBackStack) {
                transaction.addToBackStack(null)
            }
            transaction.commit()
            fragmentManager.executePendingTransactions()
        }
    } catch (illegalState: IllegalStateException) {
        illegalState.printStackTrace()
    }
}

Это макет фрагмента, который я пытаюсь поместить в структуру кадра, фрагмент_lesson_view.xml :

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
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="com.trabajofindegrado.ui.screens.lessonview.LessonViewFragment">

<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="@string/hello_blank_fragment" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/fab_margin"
    android:src="@drawable/ic_message"
    app:layout_anchor="@+id/bottom_sheet_filters"
    app:layout_anchorGravity="top|end" />

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

Я думаю, что проблема может быть здесь, поскольку FloatingActionButton неправильно привязывает макет, как будто он не может его найти.

фрагмент, просто пустой, чтобы проверить его:

class LessonViewFragment : Fragment() {
    companion object {
        val TAG = LessonViewFragment::class.java.simpleName

        val startIntent: Intent
            get() = Intent(TAG)
    }

    override fun onCreateView(inflater: LayoutInflater, 
                          container: ViewGroup?,
                          savedInstanceState: Bundle?): View? =
        inflater.inflate(R.layout.fragment_lesson_view, container, false)

}

И, наконец, вот bottom_sheet_filters.xml , который, я не думаю, что имеет проблему, так как он на 100% скопирован из примераЯ сделал:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="340dp"
android:background="@android:color/darker_gray"
android:orientation="vertical"
app:behavior_hideable="true"
app:behavior_peekHeight="@dimen/peek_height"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">

<TextView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="@dimen/peek_height"
    android:background="?android:attr/windowBackground"
    android:text="@string/sheet_title" />

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="@string/very_large_test"
        android:textColor="@android:color/white" />

</android.support.v4.widget.NestedScrollView>

</LinearLayout>

Кажется, это не проблема, если он находится внутри фрагмента, я попытался использовать фрагмент в примере, и он работает, а затем я попытался переместить BottomSheetк деятельности, и он продолжает падать.Лог:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.trabajofindegrado/com.trabajofindegrado.activities.application.ApplicationActivity}: android.view.InflateException: Binary XML file line #32: Could not inflate Behavior subclass android.support.design.widget.BottomSheetBehavior
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                      at android.app.ActivityThread.-wrap12(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6119)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                   Caused by: android.view.InflateException: Binary XML file line #32: Could not inflate Behavior subclass android.support.design.widget.BottomSheetBehavior
                   Caused by: java.lang.RuntimeException: Could not inflate Behavior subclass android.support.design.widget.BottomSheetBehavior
                      at android.support.design.widget.CoordinatorLayout.parseBehavior(CoordinatorLayout.java:628)
                      at android.support.design.widget.CoordinatorLayout$LayoutParams.<init>(CoordinatorLayout.java:2795)
                      at android.support.design.widget.CoordinatorLayout.generateLayoutParams(CoordinatorLayout.java:1703)
                      at android.support.design.widget.CoordinatorLayout.generateLayoutParams(CoordinatorLayout.java:112)
                      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:989)
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:854)
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
                      at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
                      at com.trabajofindegrado.activities.application.ApplicationActivity.onCreate(ApplicationActivity.kt:50)
                      at android.app.Activity.performCreate(Activity.java:6720)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                      at android.app.ActivityThread.-wrap12(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6119)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                   Caused by: java.lang.reflect.InvocationTargetException
                      at java.lang.reflect.Constructor.newInstance0(Native Method)
                      at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
                      at android.support.design.widget.CoordinatorLayout.parseBehavior(CoordinatorLayout.java:626)
                      at android.support.design.widget.CoordinatorLayout$LayoutParams.<init>(CoordinatorLayout.java:2795) 
                      at android.support.design.widget.CoordinatorLayout.generateLayoutParams(CoordinatorLayout.java:1703) 
                      at android.support.design.widget.CoordinatorLayout.generateLayoutParams(CoordinatorLayout.java:112) 
                      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:989) 
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:854) 
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:518) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
                      at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 
                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
                      at com.trabajofindegrado.activities.application.ApplicationActivity.onCreate(ApplicationActivity.kt:50) 
                      at android.app.Activity.performCreate(Activity.java:6720) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                      at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6119) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
                   Caused by: java.lang.UnsupportedOperationException: Can't convert value at index 1 to dimension: type=0x4
                      at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:720)
                      at android.support.design.widget.BottomSheetBehavior.<init>(BottomSheetBehavior.java:187)
                      at java.lang.reflect.Constructor.newInstance0(Native Method) 
                      at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 
                      at android.support.design.widget.CoordinatorLayout.parseBehavior(CoordinatorLayout.java:626) 
                      at android.support.design.widget.CoordinatorLayout$LayoutParams.<init>(CoordinatorLayout.java:2795) 
                      at android.support.design.widget.CoordinatorLayout.generateLayoutParams(CoordinatorLayout.java:1703) 
                      at android.support.design.widget.CoordinatorLayout.generateLayoutParams(CoordinatorLayout.java:112) 
                      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:989) 
                      at android.view.LayoutInflater.rInflate(LayoutInflater.java:854) 
                      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:518) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
                      at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
                      at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 
                      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
                      at com.trabajofindegrado.activities.application.ApplicationActivity.onCreate(ApplicationActivity.kt:50) 
                      at android.app.Activity.performCreate(Activity.java:6720) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                      at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6119) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

Заранее спасибо

1 Ответ

0 голосов
/ 12 мая 2018

Невозможно прокомментировать> недостаточное количество очков репутации.

Мои 2 цента: Не совсем уверен, но не все ли виджеты библиотеки поддержки дизайна должны быть прямыми потомками CoordinatorLayout?

Убедитесь, что все ваши другие размеры правильны (имеют правильные единицы измерения, соответствующие другим размерам, например, peek_height не больше, чем сам нижний лист).

Кроме того, вы вкладываете CoordinatorLayout s, я сомневаюсьу вас есть лучшие показатели производительности там.Я предлагаю вам найти лучший дизайн.

Я надеюсь, что это отвечает на ваш вопрос

...