环境
添加依赖
本文使用的是AndroidX
implementation 'androidx.recyclerview:recyclerview:1.1.0'
基本使用
xml配置
在需要使用RecyclerView的layout添加如下代码
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/card_recy"
/>
新建一个item_view.xml用来设置RecyclerView中item的样式,代码中
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFF0F0F0"
android:padding="5dp"
android:gravity="bottom"
tools:ignore="MissingDefaultResource">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
>
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_centerVertical="true"
android:layout_marginStart="40dp"
android:background="@drawable/select"
/>
<ImageView
android:id="@+id/iv_managedata_item_check"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_centerVertical="true"
android:layout_marginStart="40dp"
android:src="@drawable/is_select"
android:visibility="invisible" />
</RelativeLayout>
<ImageView
android:id="@+id/iv_managedata_item_head"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_marginStart="40dp"
android:src="@mipmap/ic_launcher"
android:layout_weight="1"
/>
<ImageView
android:id="@+id/iv_managedata_item_fp"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_marginStart="40dp"
android:src="@mipmap/ic_launcher"
android:layout_weight="1"
/>
<TextView
android:id="@+id/tv_managedata_item_name"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:textSize="25sp" />
<TextView
android:id="@+id/tv_managedata_item_idcard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:textSize="25sp"
android:layout_weight="4"
/>
<TextView
android:id="@+id/tv_managedata_item_datetime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="40dp"
android:textSize="25sp"
android:layout_weight="1"
/>
<!--认证状态-->
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
/>
</LinearLayout>
Java配置
首先为RecyclerVIew创建一个Adapter
public class IdCardAdapter extends RecyclerView.Adapter<IdCardAdapter.ViewHolder> {
private List<DownloadId> downloadIdList;
private Activity activity;
private RequestOptions options;
@NonNull
@Override
public IdCardAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, null, false);
ViewHolder holder = new ViewHolder(itemView);
return holder;
}
public IdCardAdapter(List<DownloadId> downloadIdList, Activity activity) {
this.activity=activity;
this.downloadIdList = downloadIdList;
options = new RequestOptions()
.error(R.mipmap.ic_launcher)
.override(80,80)
.centerCrop()
.diskCacheStrategy(DiskCacheStrategy.DATA);
}
@Override
public void onBindViewHolder(@NonNull IdCardAdapter.ViewHolder holder, int position) {
Glide.with(activity).load(downloadIdList.get(position).getRlzp()).apply(options).into(holder.mPhoto);
Glide.with(activity).load(downloadIdList.get(position).getZwtz()).apply(options).into(holder.mFPhoto);
holder.mName.setText(downloadIdList.get(position).getXm());
holder.mCardId.setText(downloadIdList.get(position).getId());
holder.mCheck.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(downloadIdList.get(position).isCheck()){
holder.mCheck.setImageResource(R.drawable.is_select);
downloadIdList.get(position).setCheck(false);
}else {
holder.mCheck.setImageResource(R.drawable.select);
downloadIdList.get(position).setCheck(true);
}
}
});
}
@Override
public int getItemCount() {
return downloadIdList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
ImageView mPhoto;
ImageView mCheck;
ImageView mFPhoto;
TextView mName;
TextView mCardId;
public ViewHolder(View view) {
super(view);
mPhoto = (ImageView) view.findViewById(R.id.iv_managedata_item_head);
mFPhoto = (ImageView) view.findViewById(R.id.iv_managedata_item_fp);
mCheck = (ImageView) view.findViewById(R.id.iv_managedata_item_check);
mName = (TextView) view.findViewById(R.id.tv_managedata_item_name);
mCardId = (TextView) view.findViewById(R.id.tv_managedata_item_idcard);
}
}
}
然后再Activity中实现,下面运用了Room框架获取数据。
public class CardInfoActivity extends AppCompatActivity {
RecyclerView recyclerView;
LinearLayoutManager linearLayoutManager;
IdCardAdapter idCardAdapter;
Card_info card_info;//Room数据库Dao
List<DownloadId> downloadIds;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_card_info);
recyclerView = findViewById(R.id.card_recy);
card_info= Card_Info_Datebase.getInstance(this).getCard_InfoDao();//数据库方法
downloadIds=card_info.selectAllInfo();
linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
idCardAdapter = new IdCardAdapter(downloadIds, CardInfoActivity.this);
recyclerView.setAdapter(idCardAdapter);
idCardAdapter.refresh(downloadIds);
}
}
DownloadId实例,@Entity,@PrimaryKey,@Ignore为Room相关注解。想要了解Room框架可以看我另一篇文章,Android Room框架学习记录
@Entity(tableName = "card_info")
public class DownloadId {
/**
* 系统下发
* 身份信息
*/
@PrimaryKey(autoGenerate = true)
public int id;
private String zjhm;
private String xm;
private String zwtp;
private String zwtz;
private String rlzp;
@Ignore
private boolean isCheck=false;
public boolean isCheck() {
return isCheck;
}
public void setCheck(boolean check) {
isCheck = check;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getZjhm() {
return zjhm;
}
public void setZjhm(String zjhm) {
this.zjhm = zjhm;
}
public String getXm() {
return xm;
}
public void setXm(String xm) {
this.xm = xm;
}
public String getZwtp() {
return zwtp;
}
public void setZwtp(String zwtp) {
this.zwtp = zwtp;
}
public String getZwtz() {
return zwtz;
}
public void setZwtz(String zwtz) {
this.zwtz = zwtz;
}
public String getRlzp() {
return rlzp;
}
public void setRlzp(String rlzp) {
this.rlzp = rlzp;
}
@Override
public String toString() {
return "DownloadId{" +
"zjhm='" + zjhm + '\'' +
", xm='" + xm + '\'' +
", zwtp='" + zwtp + '\'' +
", zwtz='" + zwtz + '\'' +
", rlzp='" + rlzp + '\'' +
'}';
}
}
至此就可以大概实现RecyclerView的基本功能了。