RecyclerView的简单用法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43740349/article/details/102738469

本文为个人理解,如有错误请多指教。

****RecyclerView的基本用法

1.先找Gradle Scripts文件夹下的build.grade(Module:app)文件

在dependencies下添加依赖

dependencies{
...
	implementation 'androidx.recyclerview:recyclerview:1.0.0'
}

然后点击右上方的Sync Now

2.写一个适配器布局,用于显示RecyclerView的每一项

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:id="@+id/name"
        />
    <TextView
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight="3"
        android:id="@+id/age"
        />

</LinearLayout>

3.写一个实体类,用于适配器和RecyclerView相对应。

public class Item{

private String name;
private String age;
//定义两个变量,用于对应xml中的 age 和 name

public Item(String name,String age){
        this.name = name;
        this.age = age;
        }

public String getName(){
        return name;
        }
public String getAge(){
        return age;
        }
    }

4.现在可以写适配器了

//1.先写一个构造方法,用于接收要显示的数据
//2.写一个内部类,用于继承ViewHolder方法,并在这个类中设置这个类的属性
//3.在内部类的构造方法中对属性进行初始化
//4.继承RecyclerView的Adapter方法(adapter extends RecyclerView.Adapter<adapter.viewHolder>)
/*关于ViewHolder:
我们在继承RecyclerView.Adapter方法时,会自动生成三个方法。

onCreateViewHolder,onBindViewHolder,getItemCount。

所以我的理解是这样的,RecyclerView.Adapter方法实现RecyclerView的适配器。实现的其实是将内部类viewHolder的对象实例化(因为viewHolder实际继承了ViewHolder)。

所以我们继承的时候直接加上<adapter.viewHolder>的泛型,使onCreateViewHolder方法直接返回一个viewHolder类型的对象,然后在onBindViewHolder方法中为这个对象的属性赋值。

这样,一个具有viewHolder属性的对象,也就是RecyclerView每一项的实际内容就显示出来了。
*/
public class adapter extends RecyclerView.Adapter<adapter.viewHolder>{


	private List list;
	public adapter(List list){
		this.list = list;
		//构造方法
	}
	public class viewHolder extends RecyclerView.ViewHolder{
		//内部类
		TextView textView1;
		TextView textView2;
		//设置属性
		public viewHolder(View itemView){
		//在内部类的构造方法中给属性初始化
			super(itemView);
			textView1 = itemView.findViewById(R.id.age);
			textView2 = itemView.findViewById(R.id.name);
		}
	}

	    @NonNull
    @Override
    public viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    //用于创建viewHolder对象
        View view  = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);
        viewHolder holder = new viewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull viewHolder holder, int position) {
    //用于给viewHolder对象赋值
        Item item = (Item) list.get(position);
       holder.t1.setText(item.getName());
       holder.t2.setText(item.getAge());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
    
}

5.在布局给RecyclerView留下空间,就像这样

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycler"

        >

6.在活动中使用RecyclerView

public class MainActivity extends AppCompatActivity {

    List list = new ArrayList();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);

        init();//生成数据
        
        RecyclerView re = findViewById(R.id.recycler);
        adapter a = new adapter(list);//加载适配器
        
        LinearLayoutManager manager = new LinearLayoutManager(this);
        //LayoutManager用于指定RecyclerView的布局方式
			
        re.setLayoutManager(manager);
        re.setAdapter(a);
    }

    public void init(){

        //传入数值
        Item item = new Item("aa","aaaa");
        list.add(item);
    }
}

7.然后运行就可以了,一个简单的RecyclerView就实现了

猜你喜欢

转载自blog.csdn.net/qq_43740349/article/details/102738469