如何将listview和recyclerview放入linearlayout

Posted

技术标签:

【中文标题】如何将listview和recyclerview放入linearlayout【英文标题】:How to Put listview and recyclerview in linearlayout 【发布时间】:2019-11-18 14:40:03 【问题描述】:

android:layout_
android:layout_
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">

<ListView
    android:layout_
    android:layout_
    android:id="@+id/list_items"></ListView>
<android.support.v7.widget.RecyclerView
    android:layout_
    android:layout_
    android:id="@+id/recycler">

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

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

新的 XML

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

    android:layout_
    android:layout_
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

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

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

它在屏幕的 1/4 处显示列表视图,屏幕的其余部分显示回收器视图。 我希望 listview 的所有项目都将显示为 listview end 的 recyclerview 项目开始显示。

【问题讨论】:

使用linearlayout android:weightSum="2"的weightSum属性,设置权重为listview和recyclerview android:layout_ android:layout_weight="1" 你好@ZahoorSaleem 我不想在两个设备之间分配空间,我希望首先显示listview 的所有arraylist 列表。由于 Listview 将完成启动 recyclerview 项目。但正如你提到的,它将屏幕分为两部分。 在 Recycler 和 Listview 中添加 android:fillViewport="true" 并将 Linearlayout 放在 Scrollview 中 为什么需要列表视图中的回收站视图 @PuneetKansal firs 选项通过获取其子项的高度以编程方式设置两者的权重和其他一个设置的高度 【参考方案1】:

android设计的一个很好的特点是线性布局中的Weight_sum属性。在上面的代码中进行如下更改,...

<LinearLayout 
android:layout_
android:layout_
android:orientation="vertical"
android:weightSum="2">
<ListView
    android:layout_
    android:layout_
    android:layout_weight="1" />
<android.support.v7.widget.RecyclerView
    android:layout_
    android:layout_
    android:layout_weight="1" />

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

<LinearLayout 
android:layout_
android:layout_
android:orientation="vertical"
android:weightSum="3">
<ListView
    android:layout_
    android:layout_
    android:layout_weight="2" />
<android.support.v7.widget.RecyclerView
    android:layout_
    android:layout_
    android:layout_weight="1" />

您将了解一些重量的工作原理! 愿回答对你有帮助!

【讨论】:

您好@Happy Bhimani 我已经根据您的代码进行了评论。我不想将布局分成几部分。我想显示列表视图项目,然后是回收站视图项目。【参考方案2】:

首选方法是使用单个 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 的回收机制无效,因为两个视图的高度都被拉伸到全长,并且没有项目视图被重用/回收。

【讨论】:

以上是关于如何将listview和recyclerview放入linearlayout的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RecyclerView 构建水平 ListView

如何通过单击两个按钮在单个活动中在 RecyclerView 和 ListView 之间切换?

将 ListView 转换为 RecyclerView

在滚动列表中实现视频的播放(ListView & RecyclerView)

Android在滚动列表中实现视频的播放 ListView RecyclerView

RecyclerView