アンドロイド滝、完璧なソリューションスライディングプロセス項目の場所の混乱、プルダウンリフレッシュ空白のトップ、トップロードより障害やその他の問題

StaggerdRecyclerView

アンドロイド滝、完璧なソリューションスライディングプロセス項目の場所の混乱は、プルダウンリフレッシュブランクのトップは、トップロードより障害やその他の問題、あなたはアニメーション効果を達成することができます

レンダリング

ここに画像を挿入説明

統合されました

allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}

dependencies {
	        implementation 'com.github.moo611:StaggerdRecyclerView:latestversion'
	}

基本的な使い方

1.追加レイアウトファイル


<com.atech.staggedrv.StaggerdRecyclerView
    android:id="@+id/str"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

2.お使いのモデル、StaggedModelインタフェースを達成するために必要

//示例 example
public class FakeModel implements StaggedModel {
 
    private int width;
    private int height;
    private int resourceId;

    public FakeModel(int width, int height, int resourceId){
        this.width = width;
        this.height = height;
        this.resourceId = resourceId;
    }



    @Override
    public int getWidth() {
        return width;
    }

    @Override
    public int getHeight() {
        return height;
    }

    @Override
    public String getTitle() {
        return null;
    }

    @Override
    public String getThumb() {
        return null;
    }

    @Override
    public int localResorce() {
        return resourceId;
    }
}

3.あなたのアダプタ、継承staggedadapterへの必要性

  class MyAdapter<T extends StaggedModel> extends StaggedAdapter<T> {

        MyAdapter(Context c) {
            super(c);
        }


        @Override
        public RecyclerView.ViewHolder addViewHolder(ViewGroup viewGroup, int i) {
            //绑定自定义的viewholder
            View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.custom_item_layout,viewGroup,false);
            return new MyHolder(v);
        }

        @Override
        public void bindView(RecyclerView.ViewHolder viewHolder, int i) {

            MyHolder myHolder = (MyHolder)viewHolder;


            // 在加载图片之前设定好图片的宽高,防止出现item错乱及闪烁
            ViewGroup.LayoutParams layoutParams = myHolder.img.getLayoutParams();
            layoutParams.height = datas.get(i).getHeight();
            myHolder.img.setLayoutParams(layoutParams);

            myHolder.img.setImageResource(datas.get(i).localResorce());

        }


    }

4.あなたのviewholder、およびrecyclerviewの文言と同じ時間。

class MyHolder extends RecyclerView.ViewHolder{

        ImageView img;

        public MyHolder(@NonNull View itemView) {
            super(itemView);

            img = itemView.findViewById(R.id.img);

        }
    }

5.mainactivity

MyAdapter<FakeModel> staggedAdapter;
StaggerdRecyclerView str;
private List<FakeModel> datas = new ArrayList<>();
...


        str = findViewById(R.id.str);
        staggedAdapter = new MyAdapter<>(this);
        str.link(staggedAdapter,2);

      
        str.addCallbackListener(new LoadMoreAndRefresh() {
            @Override
            public void onLoadMore() {
                loadMore();//加载更多
            }

            @Override
            public void onRefresh() {

                refresh();//下拉刷新
            }
        });

        refresh();

...

その他の機能

アニメーション

str.addAnimation(R.anim.right_to_left);

セット間隔

str.addDecoration(new GridItemDecoration(this,10));

リフレッシュ禁止

str.enableRefresh(false);

もっとロードから

str.enableLoadMore(false);

原則

ときにスライド位置障害

Recyclerviewはスライドでは、キャッシュの再利用メカニズムので、アイテムを使用すると、ImageViewの幅と高さが不明な場合は、それは混乱と位置が点滅の原因となります、再描画されます。

あなたは空白のトップを更新すると

リフレッシュspanIndexの再生の計算項目で、その結果、onItemsChanged方法のStaggeredGridLayoutManagerトリガ行うことnotifyDataSetChanged()メソッドを使用する場合、項目の場所の欄はブランクの頂部につながる、変更されています。変更はnotifyItemRangeInserted、notifyItemRangeChangedで部分リフレッシュが発生することはありません。

参照

https://www.jianshu.com/p/d34075c0f287

リリース6元記事 ウォンの賞賛4 ビュー1379

おすすめ

転載: blog.csdn.net/qq_39678305/article/details/105180336