I have used RecyclerView and StaggeredGridLayoutManager.
When I scroll from top to the bottom, it looked well. But when I scroll from bottom to the top , the top child view appear a blank.
Now, I found when I scroll from top to bottom, it looks :
left1 right1
left2 right2
left3 right3
left4 right4
left5 right5
left6 right6
left7 right7
When I scroll from bottom to the top, something happened, it looks like this:
right1 left1
right2 left2
right3 left3
right4 left4
left5 right5
left6 right6
left7 right7
and the height of left and right is different, so when on the top , it appeared a blank.
Here is my code :
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());
Now I do not know how to solve it.
here is my Adapter code:
@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;
}
}
here is my bindHolder code:
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));
here is my xml code:
<?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>