1.在app/build.gradle文件里,在dependencies中添加依赖
dependencies{
implementation 'com.android.support:recyclerview-v7:30.0.0'//这里面的30,要与上面compileSdkVersion 28 的后面数字相同
}
2.在主活动的layout中父布局为LinearLayout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
3.创建一个实体类,给RecycleView的适配器(Adapter)适配
package utils;
public class TX {
private String name;
private int imageId;//两个成员变量
public TX(String name, int imageId) {//构造方法,用以赋值
this.name = name;
this.imageId = imageId;//赋予变量值
}
public String getName() {//获得Name的值
return name;
}
public int getImageId() {//用以获得图片ID的值
return imageId;
}
}
4.每个子项的Layout,用来显示RecyclerView中显示的内容
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/tx_image"
android:layout_width="50dp"
android:layout_height="50dp" />
<TextView
android:id="@+id/tx_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000000"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:textSize="30sp">
</TextView>
</LinearLayout>
5.适配器(最重要的部分,也是最有难度的一部分)
public class TxAdapter extends RecyclerView.Adapter<TxAdapter.ViewHolder> {
private List<TX> mList;
static class ViewHolder extends RecyclerView.ViewHolder{
//内部静态类,用以定义TxApter.View的泛型
ImageView txImage;
TextView txName;
View txview;
public ViewHolder(@NonNull View itemView) {
super(itemView);
txview = itemView;
txImage = itemView.findViewById(R.id.tx_image);
txName = itemView.findViewById(R.id.tx_name);
}
}
public TxAdapter(List<TX> list){
mList = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view =LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);
ViewHolder viewHolder = new ViewHolder(view);
//点击事件
viewHolder.txview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TX tx = mList.get(viewHolder.getAdapterPosition());
Toast.makeText(v.getContext(),tx.getName(),Toast.LENGTH_LONG).show();
}
});
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
TX tx = mList.get(position);
holder.txImage.setImageResource(tx.getImageId());
holder.txName.setText(tx.getName());
}
@Override
public int getItemCount() {
//用以返回RecyclerView的总共长度,这里直接使用了链表的长度(size)
return mList.size();
}
}
6.在主活动的.java文件中添加代码
public class MainActivity extends AppCompatActivity {
private List<TX> txList = new ArrayList<>();//一个全局的链表
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTxs();
RecyclerView recyclerView = findViewById(R.id.recyclerview);
LinearLayoutManager manager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(manager);
TxAdapter adapter = new TxAdapter(txList);
recyclerView.setAdapter(adapter);
}
private void initTxs() {
for (int i=0; i <20 ; i++) {
TX tx1 = new TX("牛",R.drawable.niu);
txList.add(tx1);
TX tx2 = new TX("天",R.drawable.tian);
txList.add(tx2);
}
}
}
然后一个RecyclerView就可以正常运行了
熟能生巧!