RecyclerView利用分析

特性0.RecyclerView

1.LayoutManagerクラス

2.Adapterクラス

3.ViewHolderクラス

4.別の構成のLayoutManager

項目5.設定Clickイベント

6.RecyclerView挿入、削除データ



0.RecyclerViewの特徴:

  • 柔軟で構成することができます
  • それはカスタマイズすることができ、アイテムの中で再利用することができます
  • 高度に分離さ

1.LayoutManagerクラス:
LayoutManagerのクラスは抽象クラスであり、アンドリューは、私たちの使用のためにその実装クラスの3を提供してくれます。

1.1LinearLayoutManager:リニアレイアウトマネージャ。
我々は結果の表示には、より広範な操作を行うことができるようにLinearLayoutManagerは、私たちにいくつかのAPIを与えます。
ここに画像を挿入説明

1.2GridLayoutManager:グリッドレイアウトマネージャ
我々はそれにそのコンストラクタ内の列数を渡すことができます。
ここに画像を挿入説明

1.3StaggeredGridLayoutManager:カスケードレイアウトマネージャ
同じ高さItemViewの異なる幅。
ここに画像を挿入説明

決定RecyclerViewスタイル、線形、またはカスケードのメッシュ。

2.Adapterクラス
データとビュー、一般との関係処理するViewHolder使用とします。
各アダプタはRecyclerView.Adapterから継承し、3つのメソッドを実装する必要があり:.
** onCreateViewHolder:** ViewHolderとリターンを作成します

    //创建并返回泛型中要求的ViewHolder
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.itemlayout,parent,false));
    }
 

** onBindViewHold:** ViewHolderにデータ

 //通过ViewHolder来绑定数据
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
    //给ViewHolder持有的控件实例初始化
        holder.mIv.setImageResource(getIcon(position));
        holder.mTv.setText(dataSource.get(position));

//为瀑布流布局设置动态高度
        if (recyclerView.getLayoutManager().getClass() == StaggeredGridLayoutManager.class)
        {
            //如果当前布局问瀑布流布局,则设置随机高度
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getRandomHight());
            holder.mTv.setLayoutParams(params);
        }
        else
        {
        //否则设置普通的宽高
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
            holder.mTv.setLayoutParams(params);
        }

        if (addDataPosition == position)
        {
            holder.mItemView.setBackgroundColor(Color.RED);
        }
        holder.mItemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //调用接口的回调方法
                if (onItemClickListener!=null)
                {
                    onItemClickListener.onItemClick(position);
                }
            }
        });

    }

** getItermCount:**の数を示すリストを返す
行のサイズでこのメソッドが返すデータソース(通常はリスト)

3.ViewHolderカテゴリ:
例のItemViewを受けます。あなたにはコントロールインスタンスItemView ViewHolderで作成し、初期化動作の制御インスタンスItemView findViewById方法により行うことができます。

  // MyViewHolder 是一个内部类,代码如下:

    class  MyViewHolder extends RecyclerView.ViewHolder
    {
        View mItemView;//为了拿到ItemView
        ImageView mIv;//
        TextView mTv;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
             mIv = itemView.findViewById(R.id.iv);
             mTv = itemView.findViewById(R.id.tv);
             mItemView = itemView;
        }
    }

4.別の構成のLayoutManager

4.1LinearLayoutManager:

//LinearLayoutManager 构造函数有一个上下文参数
  LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        //如果想要将数据横向排列
        linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        //如果想到将数据倒序排列
        linearLayoutManager.setReverseLayout(true);
        //为recyclerView设置布局管理器
        mRecyclerView.setLayoutManager(linearLayoutManager);

4.2 GridLayoutManager:

//GridLayoutManager 构造函数有两个参数,分别为上线文Context和网格布局的列数
 GridLayoutManager gridLayoutManager = new GridLayoutManager(MainActivity.this ,2);
 mRecyclerView.setLayoutManager(gridLayoutManager);

4.3 StaggeredGridLayoutManager:

//StaggeredGridLayoutManager 构造函数有两个参数,分别为列数和布局方向

 StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(staggeredGridLayoutManager);

滝は、感情レベルに表示されたレイアウトに流れるようにするには、アダプタに設定する必要があります

 在onBindViewHolder方法中添加如下代码
 if (recyclerView.getLayoutManager().getClass() == StaggeredGridLayoutManager.class)
        {
            //如果当前布局问瀑布流布局,则设置随机高度
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,getRandomHight());
            holder.mTv.setLayoutParams(params);
        }
        //获取一个随机的值
 private int getRandomHight()
    {
        return (int )(Math.random()*1000);
    }

5.設定項目へのクリックイベント
5.1 Statementインタフェース

//这个接口放在Adapter类中就行
interface OnItemClickListener
    {
        void onItemClick(int position);
    }

ViewHolderで変数を宣言し、次にセット方式を設定する5.2インターフェイス

 public void setOnItemClickListener(MyRecyclerViewAdapter.OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

クリックイベントでonBindViewHolder方法のクリックイベントコールバックインタフェースのメソッドで5.3構成アイテム

 holder.mItemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //调用接口的回调方法
                if (onItemClickListener!=null)
                {
                    onItemClickListener.onItemClick(position);
                }
            }
        });

5.4
SETメソッド呼び出しアダプタ、クリックイベントの実装にインターフェイスを設定

 myRecyclerViewAdapter.setOnItemClickListener(new MyRecyclerViewAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                Toast.makeText(MainActivity.this,"第"+position+"条数据被点击",Toast.LENGTH_SHORT).show();
            }
        });

6.RecyclerView挿入、削除データ
6.1実装するアダプタでデータ、削除データを追加するには2つの方法:

//添加数据
   public void addData(int position)
    {
        addDataPosition = position;
        dataSource.add(position,"插入的数据");//dataSource是一个list数组
        notifyItemInserted(position);//设置数据增加更新
        notifyItemRangeChanged(position,dataSource.size()-position);//设置数据下标更新
    }
    //删除数据
    public void deleteData(int position)
    {
        addDataPosition = -1;
        dataSource.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position,dataSource.size()-position);
    }

学ぶためにこれらのではなく、ドアの外にRecyclerView上の基本的な使用、私は誰もが平和を願っています。

公開された47元の記事 ウォン称賛15 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_41525021/article/details/104171577