如何在屏幕上设置两个相同大小的RecyclerView,保持高度换行内容以避免空白

问题描述 投票:-2回答:2

我想在同等高度的屏幕上设置两个RecyclerViews同样覆盖屏幕,问题是,如果我使用高度,因为wrap_content视图不会平均扩展,如果我修复他们的高度或给他们layout_weight,那将会有如果其中一个列表为空,则为空格。

我希望列表不占用空间,如果这些列表为空,并且如果两个列表中都有数据,则它们覆盖屏幕上的相等空间。

android layout android-recyclerview height android-layout-weight
2个回答
3
投票

您不能仅在XML中执行此操作。你需要一点Java。您使用布局权重在正确的轨道上。

CML框架:

<LinearLayout
    android:orientation="vertical">

    <RecyclerView
        android:id="@+id/recView1"
        android:layout_height="0dp"
        android:layout_weight="1"
    />

    <RecyclerView
        android:id="@+id/recView2"
        android:layout_height="0dp"
        android:layout_weight="1"
    />

</LinearLayout>

下一部分需要用Java完成。

向两个适配器添加数据观察器,并确保覆盖所有方法并让它们调用onChanged()。然后,在onChanged()中,检索当前适配器的计数并适当设置RecyclerView的可见性。

这是第一个例子:

recView1.getAdapter().registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
    @Override
    public void onChanged() {
        recView1.setVisibility(recView1.getAdapter().getItemCount() > 0 ? View.VISIBLE : View.GONE);
    }

    @Override
    public void onItemRangeChanged(int positionStart, int itemCount) {
        onChanged();
    }

    @Override
    public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
        onChanged();
    }

    @Override
    public void onItemRangeInserted(int positionStart, int itemCount) {
        onChanged();
    }

    @Override
    public void onItemRangeRemoved(int positionStart, int itemCount) {
        onChanged();
    }

    @Override
    public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
        onChanged();
    }
}

实际上,您应该将两个观察者都提取到变量中,以便在包含Activity / Window /的任何内容被销毁时可以取消注册它们。


0
投票

使用下面的代码希望它能工作

int x=this. getResources().getDisplayMetrics().heightPixels*1/2;
recyclerview1.setLayoutParams(new LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, x));
recyclerview2.setLayoutParams(new LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, x));
© www.soinside.com 2019 - 2024. All rights reserved.