web-dev-qa-db-fra.com

BottomSheetBehavior n'est pas un enfant de CoordinatorLayout

voici ma mise en page XML avec le nom songlist:

 enter image description here

<Android.support.design.widget.CoordinatorLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical">

        <LinearLayout
            Android:id="@+id/viewA"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_weight="0.6"
            Android:background="@Android:color/holo_purple"
            Android:orientation="horizontal"/>

        <Android.support.v4.widget.NestedScrollView
            Android:id="@+id/bottom_sheet"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:background="@Android:color/holo_blue_bright"
            app:layout_behavior="Android.support.design.widget.BottomSheetBehavior"
            >
            <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent">
                <ListView
                    Android:id="@+id/list"
                    Android:layout_width="match_parent"
                    Android:layout_height="308dp"
                    />
            </LinearLayout>

        </Android.support.v4.widget.NestedScrollView>
    </LinearLayout>
    <Android.support.design.widget.FloatingActionButton
        Android:id="@+id/fab"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_margin="16dp"
        Android:clickable="true"
        Android:src="@drawable/personlog"
        app:layout_anchor="@id/viewA"
        app:layout_anchorGravity="bottom|center"/>

</Android.support.design.widget.CoordinatorLayout>

et voici mon fragment qui contient cette mise en page:

public class SongList extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.songlist,container,false);

        textView=(TextView)view.findViewById(R.id.txt);

        View bottomSheet = view.findViewById(R.id.bottom_sheet);
        BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);
        bottomSheetBehavior.setPeekHeight(200);
return view;}
}

mais quand déjeuner l'application me donne cette erreur:

Java.lang.IllegalArgumentException: The view is not a child of CoordinatorLayout

de cette ligne:

  BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet);

comment peut résoudre ce problème? semble que tout fonctionne bien, mais donnez cette erreur ... si quelqu'un peut s'il vous plaît aider

7
Erf

Le BottomSheetBehavior is

Un plugin de comportement d'interaction pour une vue enfant de Coordinator Layout afin de le faire fonctionner comme une feuille de fond.

Pour le moment, votre feuille de fond NestedScrollView est un enfant de LinearLayout. Il suffit donc de supprimer complètement la variable LinearLayout la plus externe.

<Android.support.design.widget.CoordinatorLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <LinearLayout
        Android:id="@+id/viewA"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:layout_weight="0.6"
        Android:background="@Android:color/holo_purple"
        Android:orientation="horizontal"/>

    <Android.support.v4.widget.NestedScrollView
        Android:id="@+id/bottom_sheet"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="@Android:color/holo_blue_bright"
        app:layout_behavior="Android.support.design.widget.BottomSheetBehavior">

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">

            <ListView
                Android:id="@+id/list"
                Android:layout_width="match_parent"
                Android:layout_height="308dp" />
        </LinearLayout>
    </Android.support.v4.widget.NestedScrollView>

    <Android.support.design.widget.FloatingActionButton
        Android:id="@+id/fab"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_margin="16dp"
        Android:clickable="true"
        Android:src="@drawable/personlog"
        app:layout_anchor="@id/viewA"
        app:layout_anchorGravity="bottom|center" />
</Android.support.design.widget.CoordinatorLayout>

Mais vous avez maintenant quelques problèmes avec le fond que vous essayez de mettre en place. Premièrement, vous ne devez pas utiliser wrap_content avec une vue de défilement. Deuxièmement, vous ne devriez pas utiliser une vue de liste dans une vue de défilement, car elle implémente son propre défilement. Vous pourrez peut-être simplifier cela en utilisant uniquement la vue liste comme feuille de fond.

9
tynn

Dans mon cas au lieu de 

<?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:layout_width="match_parent"
    Android:layout_height="match_parent"
    >

J'ai utilisé <Android.support.constraint.ConstraintLayout (dans un fragment ou une activité contenant une mise en page et une feuille de fond).

0
CoolMind