首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StaggeredGridLayoutManager位错

StaggeredGridLayoutManager位错
EN

Stack Overflow用户
提问于 2015-09-07 14:44:03
回答 2查看 1.5K关注 0票数 2

我用过RecyclerView和StaggeredGridLayoutManager。

当我从顶部滚动到底部时,它看起来很好。但是当我从底部滚动到顶部时,顶部的子视图显示为空白。

现在,我发现当我从上到下滚动时,它看起来:

代码语言:javascript
复制
  left1     right1
  left2     right2
  left3     right3
  left4     right4
  left5     right5
  left6     right6
  left7     right7

当我从底部滚动到顶部时,发生了一些事情,看起来是这样的:

代码语言:javascript
复制
  right1    left1
  right2    left2
  right3    left3
  right4    left4
  left5     right5
  left6     right6
  left7     right7

左边和右边的高度是不同的,所以当在顶部时,它出现了一个空白。

下面是我的代码:

代码语言:javascript
复制
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setItemAnimator(new DefaultItemAnimator());
staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
recyclerView.setHasFixedSize(true);
recyclerView.addItemDecoration(new ViewItemDecoration());

现在我不知道如何解决它。

下面是我的Adapter代码:

代码语言:javascript
复制
 @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        int itemViewType = getItemViewType(position);
        StaggeredGridLayoutManager.LayoutParams layoutParams1 = ((StaggeredGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams());
        if (itemViewType < 0) {
            return;
        }
        Logger.i("Topic_viewType", viewType.get(itemViewType) + "");
        switch (viewType.get(itemViewType)) {
            case ITEM:
                layoutParams1.setFullSpan(true);
                onBindItemViewHolder(holder, position);
                break;
            case ITEMS:
                layoutParams1.setFullSpan(true);
                onBindItemsViewHolder(holder, position);
                break;
            case IMAGES:
                layoutParams1.setFullSpan(true);
                onBindImageViewHolder(holder, position);
                break;
            case BLANK:
                layoutParams1.setFullSpan(true);
                break;
            case COVER:
                layoutParams1.setFullSpan(true);
                onBindCoverImageViewHolder(holder, position);
                break;
            case LINE:
                layoutParams1.setFullSpan(true);
                onBindLineViewHolder(holder, position);
                break;
            case TEXT:
                layoutParams1.setFullSpan(true);
                onBindTextViewHolder(holder, position);
                break;
            case SPACING:
                layoutParams1.setFullSpan(true);
                onBindSpacingViewHolder(holder, position);
                break;
            case READ_COUNT:
                layoutParams1.setFullSpan(true);
                onBindReadCountViewHolder(holder, position);
                break;
            case OTHER_TOPIC:
                layoutParams1.setFullSpan(true);
                break;
            case HOT:
                layoutParams1.setFullSpan(true);
                onBindHotViewHolder(holder, position);
                break;
            case MORE:
                layoutParams1.setFullSpan(true);
                onBindMoreViewHolder(holder, position);
                break;
            case ITEMS_MORE:
                layoutParams1.setFullSpan(true);
                onBindItemsMoreViewHolder(holder, position);
                break;
            case WALL_ITEM_TITLE:
                layoutParams1.setFullSpan(true);
                break;
            case WALL_ITEM:
                layoutParams1.setFullSpan(false);
                onBindWallItemViewHolder(holder, position);
                break;
            case WALL_LOAD_MORE:
                layoutParams1.setFullSpan(true);
                onBindLoadMoreViewHolder(holder, position);
                break;

        }
    }

下面是我的bindHolder代码:

代码语言:javascript
复制
String url = info.getImageSrc();
int width = info.getWidth();
int height = info.getHeight();
SimpleDraweeView imageView = viewHolder.image;
imageView.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
            UIHelper.jumpByUri(activity, info.getLink());
      }
});
if (height > 0) {
      // set the aspect ratio
      imageView.setAspectRatio(width * 1.0f / height);
}
imageView.setImageURI(Uri.parse(url));

下面是我的xml代码:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/ll_topic_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include layout="@layout/toolbar_custom" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <ImageView
        android:id="@+id/iv_feedback"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_feedback"
        android:layout_alignParentRight="true"
        android:layout_above="@+id/iv_back_top"
        android:layout_marginBottom="@dimen/space_30px"
        android:layout_marginRight="@dimen/space_30px"
        android:adjustViewBounds="true"
        android:contentDescription="@null"
        android:visibility="gone"/>

    <ImageView
        android:id="@+id/iv_back_top"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="@dimen/space_30px"
        android:layout_marginEnd="@dimen/space_30px"
        android:layout_marginRight="@dimen/space_30px"
        android:adjustViewBounds="true"
        android:contentDescription="@null"
        android:src="@drawable/up_top_icon"
        android:visibility="gone" />

</RelativeLayout>
EN

回答 2

Stack Overflow用户

发布于 2015-09-07 17:41:35

尝尝这个?

代码语言:javascript
复制
staggeredGridLayoutManager..setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS)
票数 0
EN

Stack Overflow用户

发布于 2019-07-04 22:49:39

StaggeredGridLayoutManager使用两种策略来处理差距。默认策略是GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS,这意味着StaggeredGridLayoutManager可以重新排列您的项目。在您的情况下,您可以使用GAP_HANDLING_NONE来防止重新排列。例如:

代码语言:javascript
复制
recyclerView.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL).apply {
            gapStrategy = StaggeredGridLayoutManager.GAP_HANDLING_NONE
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32432579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档