web-dev-qa-db-fra.com

RecyclerView (wrap_content) à l'intérieur d'un fragment BottomSheetDialogFragment

Je suis confronté à une situation délicate et je ne sais pas comment résoudre ce problème.
Dans mon projet, j'ai une BottomSheetDialogFragment personnalisée et dans la mise en page une FrameLayout pour ajouter ou remplacer Fragments.

Maintenant, j'ai une Fragment et à l'intérieur, j'ai une RecyclerView avec le height:="wrap_content" parce que je veux que la BottomSheetDialogFragment utilise uniquement l'espace nécessaire. Tout a l'air génial, le problème apparaît lorsque je mets une autre vue à l'intérieur de la même présentation et que je règle le RecyclerView ci-dessous ou au-dessus de cette vue.
La RecyclerView ignore la taille de la ou des autres vues et augmente toujours jusqu'à la taille maximale de l'écran. Il est alors impossible de voir quelques éléments et même de faire défiler.

J'ai vu un solution , certains développeurs suggèrent d'ajouter paddingBottom égal à la hauteur de la vue. Mais dans mon cas, cela ne fonctionne pas parce que je veux une solution dynamique.

Ci-dessus, je partagerai quelques images du problème et GitHub Repository avec un exemple.

 enter image description here  enter image description here Merci de votre attention!

9
extmkv

J'ai réussi à faire ce dont vous avez besoin, il vous suffit de l'utiliser comme fragment_sample.xml :

<LinearLayout 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="wrap_content"
Android:orientation="vertical">

<Android.support.v7.widget.RecyclerView
    Android:id="@+id/rclItems"
    Android:layout_width="match_parent"
    Android:layout_height="0dp"
    Android:layout_weight="1"
    app:layoutManager="Android.support.v7.widget.LinearLayoutManager"/>

<Button
    Android:id="@+id/btnAddMoreItems"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_below="@+id/rclItems"
    Android:text="@string/add_1_item"/>

</LinearLayout>

Explication L’utilisation de LinearLayout vous donne la possibilité de travailler avec le poids et l’orientation verticale vous permet de placer un élément sous l’autre. Le poids sur la vue de recyclage augmentera sa hauteur si nécessaire jusqu’à remplir l’écran. L'élément suivant que vous ajoutez sera ajouté à la vue de recyclage, mais vous devrez faire défiler la liste pour le voir.

2
sebasira

Je télécharge votre projet et j'essaie de résoudre le problème de cette manière:

fragment_sample.xml  

<?xml version="1.0" encoding="utf-8"?>
    <ScrollView>
        <RelativeLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content">        
        <Android.support.v7.widget.RecyclerView
            Android:id="@+id/rclItems"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            app:layoutManager="Android.support.v7.widget.LinearLayoutManager"/>       
        <Button
            Android:id="@+id/btnAddMoreItems"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_below="@+id/rclItems"
            Android:text="@string/add_1_item"/>
        </RelativeLayout>      
    </ScrollView>

J'espère que ça vous aidera ..!

0
Viral Patel