0

我正在尝试以与 ViewPager (Vertical) 类似的方式使用 RecyclerView。

我已经设置了投掷和滚动手势,因此视图的滚动方式与 ViewPager 完全相同,但现在我想设置子视图 (LinearLayoutManager) 和用于每个子视图的 LinearLayout 以填充屏幕而不是 wrap_content。我已经对 match_parent 和 fill_parent 进行了所有视图,但这不起作用。

我这样做了:

holder.layout.setMinimumHeight(this.recyclerView.getMeasuredHeight());

这很好,但是当方向改变时,布局会溢出屏幕,这使得平滑滚动/手势闪烁等。我不希望它溢出屏幕。

任何好的提示如何正确地使所有孩子都布置到屏幕的最大高度但不会溢出?

谢谢

编辑:我将设置最小高度更改为:

holder.layout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, this.recyclerView.getHeight()));

这解决了闪烁问题,但有更好的方法吗?

4

1 回答 1

0

我的声誉很低,因此无法发表评论。这就是为什么在这里回答。

为了克服溢出问题,假设你有这样的单个项目的 XMl

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="horizontal" 
 android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
android:id="@+id/mainLayout" >

<-- some views --->>

</RelativeLayout>

现在在您的适配器中在 viewHolder 中获取此布局

并在您设置 adabpter.. 的位置创建一个布尔变量,您可以使用它来了解方向已更改。当方向改变时,改变它的值。

在您的适配器中创建一个函数 public void orientaiotnChange(){ notifyDataSetChanged(); }

在你的功能中

@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int arg1) {
if(isOrientationHorizontal){
 viewHolder.Mainlayout.setOrientation(horizontal);
 }
else{
 viewHolder.Mainlayout.setOrientation(vertical);
}

还从您设置适配器的位置以及您检查方向是否更改的活动中更改 RecyclerView 的方向。

希望它会这样工作:)

于 2014-10-28T07:14:59.620 回答