如何将listview和recyclerview放入linearlayout

时间:2019-07-09 05:21:21

标签: android listview android-recyclerview android-linearlayout

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/list_items"></ListView>
<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/recycler">

</android.support.v7.widget.RecyclerView>

我需要在一个活动中添加listview和recycler视图,但是在此我只是获取listview项。回收者视图项目未显示。

新XML

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:id="@+id/list_items">
    </ListView>
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fillViewport="true"
        android:id="@+id/recycler">

    </android.support.v7.widget.RecyclerView>
</LinearLayout>
</ScrollView>

它在屏幕的1/4中显示列表视图,在屏幕的其余部分显示recyclerview。 我希望listview的所有项目都将随着listview的recyclerview项目开始显示而显示。

2 个答案:

答案 0 :(得分:2)

Android设计的一个好功能是线性布局中的 Weight_sum 属性。在您上面的代码中进行如下所示的更改,...

<LinearLayout 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="2">
<ListView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />
<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

按照上面的代码,可以在父布局中添加权重总和,并按照您希望划分布局的方式添加权重。通过编辑上面的代码进行检查,如..

<LinearLayout 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="3">
<ListView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="2" />
<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

您将了解一些减肥药的功效! 可能的答案可以帮助您!

答案 1 :(得分:0)

首选方法是使用单个RecyclerView,使其适配器处理ListView和RecyclerView的两种视图类型,但是如果您坚持要同时使用ListView和RecyclerView,则可以使用此ListView子类

public class WrapListView extends ListView {
    public WrapListView(Context context) {
        super(context);
    }

    public WrapListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 1, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

RecyclerView开箱即用地支持wrap_content,您只需调用recyclerView.setNestedScrollingEnabled(false);即可使滚动平滑

这样做将使ListView和RecyclerView的回收机制都无效,因为两个视图的高度都被拉伸到了全长,并且没有任何项目视图被重复使用/回收。