如何在屏幕上设置两个相同大小的RecyclerView,保持高度换行内容以避免空白
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在屏幕上设置两个相同大小的RecyclerView,保持高度换行内容以避免空白相关的知识,希望对你有一定的参考价值。
我想在同等高度的屏幕上设置两个RecyclerView
s同样覆盖屏幕,问题是,如果我使用高度,因为wrap_content
视图不会平均扩展,如果我修复他们的高度或给他们layout_weight
,那将会有如果其中一个列表为空,则为空格。
我希望列表不占用空间,如果这些列表为空,并且如果两个列表中都有数据,则它们覆盖屏幕上的相等空间。
答案
您不能仅在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 /的任何内容被销毁时可以取消注册它们。
另一答案
使用下面的代码希望它能工作
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));
以上是关于如何在屏幕上设置两个相同大小的RecyclerView,保持高度换行内容以避免空白的主要内容,如果未能解决你的问题,请参考以下文章