目录
- 前言
- 简单使用
---- 添加依赖
---- 创建MainActivity的布局文件
---- 创建Item的布局文件
---- 创建Person实体类
---- 创建MyAdapter适配器类
---- 在MainActivity中调用
---- 为Item添加点击事件
前言
RecyclerView是在Android5.0版本作为support-v7的一个组件出现,高效替代了最初的ListView等列表组件。
简单使用
在build.gradle
中添加依赖
implementation 'androidx.recyclerview:recyclerview:1.1.0'
创建layout_recyclerview
的XML布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
创建layout_recyclerview_item
的XML布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutView"
android:layout_width="match_parent"
android:layout_height="50dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<ImageView
android:id="@+id/leftImgView"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginStart="20dp"
android:src="@mipmap/mine_ic_message" />
<TextView
android:id="@+id/titleLab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="10dp"
android:layout_marginEnd="50dp"
android:layout_toRightOf="@+id/leftImgView"
android:text="这是一个标题"
android:textSize="16sp" />
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginRight="20dp"
android:src="@mipmap/mine_ic_arrow_right" />
</RelativeLayout>
</RelativeLayout>
创建Person
实体类
public class Person {
public String realName; // 姓名
public int sex = 1; // 性别(1:女,2:男),默认为女
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
}
创建MyAdapter
适配器类
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context mContext;
private List<Person> mList;
// 构造方法
public MyAdapter(Context mContext, List<Person> mList) {
this.mContext = mContext;
this.mList = mList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(mContext).inflate(R.layout.layout_recyclerview_item, parent, false);
MyViewHolder holder = new MyViewHolder(itemView);
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Person person = mList.get(position);
holder.titleLab.setText(person.getRealName());
}
@Override
public int getItemCount() {
return mList.size();
}
// ViewHolder重用组件
public class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView leftImageView;
private TextView titleLab;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
leftImageView = itemView.findViewById(R.id.leftImgView);
titleLab = itemView.findViewById(R.id.titleLab);
}
}
}
在MainActivity
中调用
public class MainActivity extends AppCompatActivity {
private RecyclerView myRecyclerView;
private MyAdapter myAdapter;
private List<Person> myList;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_recyclerview);
initData();
initRecyclerView();
}
private void initData(){
myList = new ArrayList<>();
for(int i = 0; i <= 10; i++){
Person person = new Person();
person.realName = "张" + (char)i;
myList.add(person);
}
}
private void initRecyclerView() {
// 适配器
myAdapter = new MyAdapter(this, myList);
// 布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(RecyclerView.VERTICAL);
// RecyclerView
myRecyclerView = findViewById(R.id.recyclerView);
myRecyclerView.setLayoutManager(linearLayoutManager);
myRecyclerView.setAdapter(myAdapter);
// 设置默认分割线
myRecyclerView.addItemDecoration(new DividerItemDecoration(this, RecyclerView.VERTICAL));
}
}
为Item添加点击事件
在MyAdapter
适配器类中做如下修改
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context mContext;
private List<Person> mList;
// Item点击事件回调
private OnItemClickBlock mOnItemClickBlock;
// 构造方法
public MyAdapter(Context mContext, List<Person> mList) {
this.mContext = mContext;
this.mList = mList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(mContext).inflate(R.layout.layout_recyclerview_item, parent, false);
MyViewHolder holder = new MyViewHolder(itemView);
// Item点击事件监听
holder.layoutView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = holder.getLayoutPosition();
mOnItemClickBlock. onItemClick( view, pos);
}
});
holder.leftImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = holder.getLayoutPosition();
mOnItemClickBlock.onItemClick(view, pos);
}
});
holder.titleLab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int pos = holder.getLayoutPosition();
mOnItemClickBlock.onItemClick(view, pos);
}
});
return holder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
Person person = mList.get(position);
holder.titleLab.setText(person.getRealName());
}
@Override
public int getItemCount() {
return mList.size();
}
// ViewHolder重用组件
public class MyViewHolder extends RecyclerView.ViewHolder {
private RelativeLayout layoutView;
private ImageView leftImageView;
private TextView titleLab;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
layoutView = itemView.findViewById(R.id.layoutView);
leftImageView = itemView.findViewById(R.id.leftImgView);
titleLab = itemView.findViewById(R.id.titleLab);
}
}
// Item点击事件回调
public interface OnItemClickBlock {
void onItemClick(View view, int position);
void onItemLongClick(View view, int position);
}
public void setOnItemClickBlock(OnItemClickBlock onItemClickListener) {
this.mOnItemClickBlock = onItemClickListener;
}
}
在MainActivity
类中做如下修改
private void initRecyclerView() {
// 适配器
myAdapter = new MyAdapter(this, myList);
myAdapter.setOnItemClickBlock(new MyAdapter.OnItemClickBlock() {
@Override
public void onItemClick(View view, int position) {
if (view.getId() == R.id.layoutView) {
Toast.makeText(FileQueryMainListActivity.this, position + "" + "layoutView", Toast.LENGTH_SHORT).show();
} else if (view.getId() == R.id.leftImgView) {
Toast.makeText(FileQueryMainListActivity.this, position + "" + "leftImgView", Toast.LENGTH_SHORT).show();
} else if (view.getId() == R.id.titleLab) {
Toast.makeText(FileQueryMainListActivity.this, position + "" + "titleLab", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onItemLongClick(View view, int position) {
}
});
// 布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(RecyclerView.VERTICAL);
// RecyclerView
myRecyclerView = findViewById(R.id.recyclerView);
myRecyclerView.setLayoutManager(linearLayoutManager);
myRecyclerView.setAdapter(myAdapter);
// 设置默认分割线
myRecyclerView.addItemDecoration(new DividerItemDecoration(this, RecyclerView.VERTICAL));
}
到这里我们直接运行代码查看效果吧!
网友评论