[英]items in GridLayoutManager (RecyclerView) changes position on scroll android
What I have 我有的
I have a GridLayoutManager (RecyclerView)
that has position 0,2,5,7 fixed with custom images (relative layout converted to bitmaps) & rest positions are filled with server images 我有一个
GridLayoutManager (RecyclerView)
,其位置0、2、5、7与自定义图像(相对布局转换为位图)固定,其余位置由服务器图像填充
My problem 我的问题
When I scroll the items in the layout changes its position 当我滚动布局中的项目时会更改其位置
My code 我的密码
@Override
public void onBindViewHolder(ProfilePhotosViewHolder ProfilePhotosViewHolder, final int position) {
model = list.get(position);
if (position == 0 || position == 2 || position == 5 || position == 7) {
if (position == 0) {
ProfilePhotosViewHolder.relativeBucket.setVisibility(View.VISIBLE);
ProfilePhotosViewHolder.relativeBucket.setDrawingCacheEnabled(true);
ProfilePhotosViewHolder.relativeBucket.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
ProfilePhotosViewHolder.relativeBucket.layout(0, 0, ProfilePhotosViewHolder.relativeBucket.getMeasuredWidth(), ProfilePhotosViewHolder.relativeBucket.getMeasuredHeight());
ProfilePhotosViewHolder.relativeBucket.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(ProfilePhotosViewHolder.relativeBucket.getDrawingCache());
ProfilePhotosViewHolder.relativeBucket.setDrawingCacheEnabled(false);
ProfilePhotosViewHolder.imgProfilePhotos.setImageBitmap(b);
}
if (position == 2) {
ProfilePhotosViewHolder.relativeFollowers.setVisibility(View.VISIBLE);
......
}
if (position == 5) {
ProfilePhotosViewHolder.relativeFollowing.setVisibility(View.VISIBLE);
......
}
if (position == 7) {
ProfilePhotosViewHolder.relativePosts.setVisibility(View.VISIBLE);
......
}
} else {
ProfilePhotosViewHolder.relativeBucket.setVisibility(View.GONE);
ProfilePhotosViewHolder.relativeFollowers.setVisibility(View.GONE);
ProfilePhotosViewHolder.relativeFollowing.setVisibility(View.GONE);
ProfilePhotosViewHolder.relativePosts.setVisibility(View.GONE);
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
ProfilePhotosViewHolder.imgProfilePhotos.setImageUrl(model.ImagesUri, imageLoader);
ProfilePhotosViewHolder.imgProfilePhotos.setDefaultImageResId(R.drawable.im_profile_monuments);
ProfilePhotosViewHolder.imgProfilePhotos.setErrorImageResId(R.drawable.im_profile_monuments);
}
This is because of the recycling mechanism , while you're playing with visibility, you also need to handle the visibility of the other View
s in each if
block. 这是因为存在回收机制 ,因此在使用可见性时,还需要处理每个
if
块中其他View
的可见性。
eg for position 2: 例如位置2:
if (position == 2) {
ProfilePhotosViewHolder.relativeFollowers.setVisibility(View.VISIBLE);
ProfilePhotosViewHolder.relativeBucket.setVisibility(View.GONE);
ProfilePhotosViewHolder.relativeFollowing.setVisibility(View.GONE);
ProfilePhotosViewHolder.relativePosts.setVisibility(View.GONE);
}
PS: I suggest you to use switch(position)
instead of nested if
blocks. PS:我建议您使用
switch(position)
而不是嵌套的if
块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.