Recyclerは、バージョン5.0以降にAndroidによって提案された新しい円形ビューレイアウトであり、私たちの開発で一般的に使用されています。今日はRecyclerViewを要約します。この記事は、リサイクラーの基本的な使用法です。
1.RecyclerViewの依存関係
implementation 'com.android.support:recyclerview-v7:28.0.0'
androidxの依存関係
implementation 'androidx.recyclerview:recyclerview:1.0.0'
誰もが特定の環境に応じて選択します
2.RecyclerViewの一般的なメソッド
- setAdapter:リストアイテムのアダプタを設定します。アダプターはRecyclerView.Adapterを使用します。
- setLayoutManager:線形レイアウトマネージャーLinearLayoutManager、グリッドレイアウトマネージャーGridLayoutManager、ウォーターフォールグリッドレイアウトマネージャーStaggeredGridLayoutManagerを含むリストアイテムのレイアウトマネージャーを設定します。
- addItemDecoration:リストアイテムの分割線を追加します。
- removeItemDecoration:リストアイテムの分割線を削除します。
- setItemAnimator:リストアイテムの追加と削除のアニメーションを設定します。デフォルトのアニメーションは、システムに付属のDefaltItemAnimatorです。
- addOnItemTouchListener:リストアイテムのタッチリスナーを追加します。RecyclerViewはリストアイテムのクリックインターフェイスを実装していないため、開発者はここのタッチリスナーを介してユーザーのジェスチャを監視できます。
- removeOnItemTouchListener:リストアイテムのタッチリスナーを削除します。
- scorllToPosition:指定された位置までスクロールします。
3.RecyclerView.Adapter関連のメソッド
<1>カスタムアダプタ用に書き直す必要のあるメソッド
- getItemCount:リストアイテムの数を取得します。
- onCreateViewHolder:レイアウト全体のビューホルダーを作成します。入力パラメータにはビュータイプが含まれ、ヘッドリストレイアウトを実現するために、ビュータイプに応じて異なるレイアウトをロードできます。
- onBindViewHolder:各アイテムのビューホルダーをバインドします。
<2>書き換え可能か否か
- getItemViewType:各アイテムのビュータイプを返します。このビュータイプは、onCreateViewHolderメソッドによって使用されます。
- getItemId:各アイテムの番号を取得します。
<3>直接呼び出すことができるメソッド
- notifyItemInserted:新しいアイテムが指定された位置に挿入されたことをアダプターに通知します。
- notifyItemRemoved:元のアイテムが指定された場所で削除されたことをアダプターに通知します。
- notifyItemChanged:指定された位置のアイテムが変更されたことをアダプターに通知します。
- notifyDataSetChanged:リスト全体のデータが変更されたことをアダプターに通知します。
4.使用例
レイアウトactivity_main.xmlを表示する
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"/>
</LinearLayout>
リストアイテムのレイアウトitem_recycler.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:src="@mipmap/aaa" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:text="这是一行文字"
android:textColor="#000000"
android:textSize="20sp" />
</LinearLayout>
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"
android:layout_marginTop="5dp"/>
</LinearLayout>
アダプターHomeAdapter.java
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{
private Context mContext;
public HomeAdapter(Context mContext) {
this.mContext = mContext;
}
/**
* 引入布局
* @param viewGroup
* @param i
* @return
*/
@Override
public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_recycler,viewGroup,false));
return holder;
}
/**
* 为控件绑定数据
* @param myViewHolder
* @param i
*/
@Override
public void onBindViewHolder(MyViewHolder myViewHolder, int i) {
myViewHolder.tv.setText("这是第"+i+"行");
if (i%2 == 0){
myViewHolder.iv.setImageResource(R.mipmap.aaa);
}else{
myViewHolder.iv.setImageResource(R.mipmap.bbb);
}
if (i == 19){
myViewHolder.view.setVisibility(View.GONE);
}else{
myViewHolder.view.setVisibility(View.VISIBLE);
}
}
/**
* 返回项个数
* @return
*/
@Override
public int getItemCount() {
return 20;
}
/**
* 定义控件并初始化
*/
class MyViewHolder extends RecyclerView.ViewHolder{
TextView tv;
ImageView iv;
View view;
public MyViewHolder(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);
iv = itemView.findViewById(R.id.iv);
view = itemView.findViewById(R.id.view);
}
}
}
アクティビティでConfigurationMainActivity.javaを使用する
public class MainActivity extends AppCompatActivity {
private RecyclerView recycler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recycler = findViewById(R.id.recycler);
//设置布局管理器
recycler.setLayoutManager(new LinearLayoutManager(this));
//设置item增加和删除时的动画
recycler.setItemAnimator(new DefaultItemAnimator());
HomeAdapter mAdapter = new HomeAdapter(this);
recycler.setAdapter(mAdapter);
}
}
これは、RecyclerViewを使用して完了するのが最も簡単な方法です。他のいくつかの使用方法は後で紹介されます。