特性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上の基本的な使用、私は誰もが平和を願っています。