RecyclerView基本用法一
阿新 • • 發佈:2019-01-08
為什麼要使用RecyclerView控制元件替換ListView和GridView呢?整體來看,RecyclerView提供了插拔式的體驗,它具有高度的解耦,異常的靈活性和更高的效率,通過設定它不同的ItemAnimator、LayoutManager、ItemDecoration可以實現更豐富多樣的效果。但是RecyclerView的使用缺點也是有的,它的分割線需要自己定義,另外他的點選事件也需要自己來實現。
一、配置 build.gradle
dependencies { implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:recyclerview-v7:27.1.1' }
二、使用RecyclerView
RecyclerView rvLayout = findViewById(R.id.rv_layout); //設定佈局管理器 LinearLayoutManager layout = new LinearLayoutManager(this); layout.setOrientation(layout.VERTICAL); rvLayout.setLayoutManager(layout); //設定新增刪除item動畫 rvLayout.setItemAnimator(new DefaultItemAnimator()); //設定Adapter RecyclerViewAdapter adapter = new RecyclerViewAdapter(this, data); rvLayout.setAdapter(adapter);
與ListView不同的是,需要設定佈局管理器用於設定條目的排列樣式,可以是水平也可以是垂直。
activity_recycler_view佈局檔案
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_layout" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
Adapter最大的改進就是對ViewHolder的封裝,我們只需要定義一個ViewHolder繼承RecyclerView.ViewHolder即可。
RecyclerViewAdapter程式碼
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolder> {
private final Context context;
private final List<String> dataList;
public RecyclerViewAdapter(Context context, List<String> dataList) {
this.dataList = dataList;
this.context = context;
}
@NonNull
@Override
//載入條目佈局
public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item_recycle, parent, false);
return new RecyclerViewHolder(inflate);
}
@Override
//將試圖與資料繫結
public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
holder.tv.setText(dataList.get(position));
}
@Override
public int getItemCount() {
return dataList.size();
}
}
RecyclerViewHolder程式碼
public class RecyclerViewHolder extends RecyclerView.ViewHolder{
public final TextView tv;
public RecyclerViewHolder(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);
}
}
item_recycle佈局檔案
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"/>
</FrameLayout>
執行效果如下