简体   繁体   English

GridLayoutManager(RecyclerView)中的项目更改滚动Android上的位置

[英]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);
        }

Screen shot 屏幕截图

After scrolling 滚动后

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM