一、用法:
RecyclerView和其他用于界面数据滑动展示的控件(GridView,ListView,Spinner等)一样,都少不了数据源,适配器,以及监听逻辑处理这三块。
下面就来讲解写RecyclerView的使用方法:
1.引用(导包)
2.布局文件引用
3.构造适配器
4.主程序,包括数据源以及逻辑处理等
上两个简单的效果图:
StaggeredGridLayoutManager 以瀑布流方式展示Item
LinerLayoutManager 以垂直或者水平列表方式展示Item
image二、贴代码时间:
Step1:引用(导包)
2.1 直接在build.gradle(Module:app)的dependencies添加,(依赖应该自带)
implementation 'androidx.recyclerview:recyclerview:1.1.0'
Step2:布局
2.2 activity_main.xml
<?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/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent"/>
</LinearLayout>
2.3 crush_item.xml
<?xml version="1.0" encoding="utf-8"?>
<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:layout_margin="5dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/crush_image"
android:layout_width="100dp"
android:layout_height="150dp"
android:layout_gravity="left"
tools:background="@drawable/image0" />
<TextView
android:id="@+id/crush_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:layout_marginLeft="40dp"
tools:text="CrushText" />
</LinearLayout>
Step3:构造适配器
封装 2.4 Crush.java
package com.gatsby.recyclertest; public class Crush { private String name; private int imageId; public Crush(String name, int imageId) { this.name = name; this.imageId = imageId;
} public String getName(){ return name;
} public int getImageId(){ return imageId;
}
}
2.5 CrushAdapter.java
2.5.1 为RecyclerView新增适配器CrshAdapter,并让其继承于RecyclerView.Adapter,把泛型指定为CrushAdapter.ViewHolder。
2.5.2 定义内部类ViewHolder,并继承RecyclerView.ViewHolder。传入的View参数通常是RecyclerView子项的最外层布局。
2.5.3 CrushAdapter构造函数,用于把要展示的数据源传入,并赋予值给全局变量mCrushList
2.5.4继承RecyclerView.Adapter必须要重写的三个方法。 onCreateViewHolder(), onBindViewHolder, getItemCoun
package com.gatsby.recyclertest;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class CrushAdapter extends RecyclerView.Adapter<CrushAdapter.ViewHolder> {
private List<Crush> mCrushList;
static class ViewHolder extends RecyclerView.ViewHolder {
View crushView;
ImageView crushImage;
TextView crushName;
public ViewHolder(@NonNull View itemView) {
super(itemView);
crushView = itemView;
crushImage = (ImageView) itemView.findViewById(R.id.crush_image);
crushName = (TextView) itemView.findViewById(R.id.crush_name);
}
public void setData(Crush crush){
crushImage.setImageResource(crush.getImageId());
crushName.setText(crush.getName());
}
}
public CrushAdapter(List<Crush> crushList) {
mCrushList = crushList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.crush_item, parent, false);
final ViewHolder holder = new ViewHolder(view);
holder.crushView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getAdapterPosition();
Crush crush = mCrushList.get(position);
Toast.makeText(v.getContext(), "you clicked view " + crush.getName(), Toast.LENGTH_SHORT).show();
}
});
holder.crushImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getAbsoluteAdapterPosition();
Crush crush = mCrushList.get(position);
Toast.makeText(v.getContext(), "you clicked image " + crush.getName(), Toast.LENGTH_SHORT).show();
}
});
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Crush crush = mCrushList.get(position);
// holder.crushImage.setImageResource(crush.getImageId());
// holder.crushName.setText(crush.getName());
holder.setData(crush);
}
@Override
public int getItemCount() {
return mCrushList.size();
}
}
2.7 MainActivity.java
package com.gatsby.recyclertest;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private List<Crush> crushList = new ArrayList<Crush>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initCrush();
CrushRecyclerView();
}
private void CrushRecyclerView(){
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
/*StaggeredGridLayoutManager layoutManager = new
StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);*/
recyclerView.setLayoutManager(layoutManager);
CrushAdapter adapter = new CrushAdapter(crushList);
recyclerView.setAdapter(adapter);
}
private void initCrush() {
for (int i = 0; i < 2; i++) {
Crush image0 = new Crush("image0", R.drawable.image0);
crushList.add(image0);
Crush image01 = new Crush("image01", R.drawable.image01);
crushList.add(image01);
Crush image02 = new Crush("image02", R.drawable.image02);
crushList.add(image02);
Crush image03 = new Crush("image03", R.drawable.image03);
crushList.add(image03);
Crush image04 = new Crush("image04", R.drawable.image04);
crushList.add(image04);
Crush image05 = new Crush("image05", R.drawable.image05);
crushList.add(image05);
Crush image06 = new Crush("image06", R.drawable.image06);
crushList.add(image06);
Crush image07 = new Crush("image07", R.drawable.image07);
crushList.add(image07);
Crush image08 = new Crush("image08", R.drawable.image08);
crushList.add(image08);
Crush image09 = new Crush("image09", R.drawable.image09);
crushList.add(image09);
Crush image10 = new Crush("image10", R.drawable.image10);
crushList.add(image10);
Crush image11 = new Crush("image11", R.drawable.image11);
crushList.add(image11);
Crush image12 = new Crush("image12", R.drawable.image12);
crushList.add(image12);
Crush image13 = new Crush("image13", R.drawable.image13);
crushList.add(image13);
}
}
}
网友评论