BottomSheetDialogFragment内的RecyclerView(wrap_content)

时间:2018-09-05 14:43:21

标签: android android-recyclerview bottom-sheet

我在这里面临着一个棘手的情况,我不知道如何解决这个问题。
在我的项目中,我有一个自定义progress,在布局中有一个if(progress),用于添加或替换BottomSheetDialogFragment

现在我有一个FrameLayout,内部有一个Fragment的{​​{1}},因为我希望Fragment仅使用必要的空间。一切看起来都很不错,当我将另一个视图放入相同布局并在该视图的下方设置RecyclerView时,问题就会出现。
height:="wrap_content"会忽略另一个视图(或多个视图)的大小,并且始终会放大到最大屏幕大小,因此就无法看到几个元素甚至滚动。

我看到了一个solution,一些开发人员建议添加等于视图高度的BottomSheetDialogFragment。但就我而言,这是行不通的,因为我想拥有一个动态的解决方案。

上面,我将与问题分享一些图片,并与示例分享GitHub Repository

enter image description here enter image description here 感谢您的关注!

2 个答案:

答案 0 :(得分:2)

我已经完成了您需要做的事情,只需要使用它作为您的 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>

说明 使用LinearLayout使您可以处理重量,并且垂直方向可以将项目放置在另一个项目的下方。 recyclerview上的重量将根据需要增加其高度,直到填满屏幕为止。您添加的下一项将会添加到recyclerview中,但是您需要滚动列表才能看到它

答案 1 :(得分:-1)

android开发人员博客说:-

  

底部工作表中的滚动容器必须支持嵌套滚动。

尝试如下更改fragment_sample.xml,以使recyclerview滚动正常工作,并使添加按钮保持不变。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 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.support.v4.widget.NestedScrollView
 android:layout_width="match_parent"
 android:id="@+id/next"
 android:layout_above="@id/btnAddMoreItems"
 android:layout_height="wrap_content">

<android.support.v7.widget.RecyclerView
    android:id="@+id/rclItems"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />
</android.support.v4.widget.NestedScrollView>
   <Button
    android:id="@+id/btnAddMoreItems"
    android:layout_width="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_height="wrap_content"
    android:text="@string/add_1_item"/>
</RelativeLayout>

注意:将底部工作表布局设为CoordinatorLayout的子视图将使您能够获取工具BottomSheetBehavior并接收其过渡回调。