Android RecyclerView(二)RecyclerView的使用
1.学完这章你会对RecyclerView有个基本的了解
1.在app目录下的build.gradle导入
compile 'com.android.support:recyclerview-v7:23.4.0'
虽然之后会有红色提示
但是没有关系
2.在main_activity.xml文件中添加RecyclerView控件,再给个id
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rv_user"
>
</android.support.v7.widget.RecyclerView>
3.创建我们的item_user
<?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="wrap_content"
android:layout_margin="10dp"
>
<ImageView
android:id="@+id/iv_user_img"
android:src="@drawable/tx"
android:layout_width="60dp"
android:layout_height="60dp" />
<TextView
android:background="#9aa1ff"
android:textColor="#ffffff"
android:textSize="20sp"
android:gravity="center"
android:layout_weight="1"
android:text="小老弟"
android:id="@+id/tv_user_name"
android:layout_width="0dp"
android:layout_height="60dp" />
</LinearLayout>
4.创建User.class
package com.yuexia.recyclerview;
/**
* Created by syt98 on 2019/1/8.
*/
public class User {
private int img;
private String name;
public User(int img, String name) {
this.img = img;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
}
5.创建适配器MyAdapter.class
这里需要继承 RecyclerView.Adapter,以及实现三个方法
package com.yuexia.recyclerview;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
/**
* Created by syt98 on 2019/1/8.
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.VH>{
private List<User> users;
//创建构造方法获取数据
public MyAdapter(List<User> users){
this.users=users;
}
public static class VH extends RecyclerView.ViewHolder{
public final ImageView img;
public final TextView name;
public VH(View itemView) {
super(itemView);
//获取控件
img=(ImageView)itemView.findViewById(R.id.iv_user_img);
name=(TextView)itemView.findViewById(R.id.tv_user_name);
}
}
@Override
public MyAdapter.VH onCreateViewHolder(ViewGroup parent, int viewType) {
//创建视图
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user,parent,false);
return new VH(v);
}
@Override
public void onBindViewHolder(MyAdapter.VH holder, int position) {
//为视图添加属性
holder.img.setImageResource(users.get(position).getImg());
holder.name.setText(users.get(position).getName());
//为条目添加点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//编写事件
}
});
//为条目子控件添加事件
holder.name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//编写事件
}
});
}
@Override
public int getItemCount() {
//返回数组长度
return users.size();
}
}
6.编写我们的MainActivity.class,写 两个方法一个用来加载视图,一个用来加载数据
package com.yuexia.recyclerview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.OrientationHelper;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<User> users=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initData() {
users.add(new User(R.drawable.tx,"小虎"));
users.add(new User(R.drawable.tx0,"胖虎"));
users.add(new User(R.drawable.tx0,"小新"));
users.add(new User(R.drawable.tx,"蜡笔"));
users.add(new User(R.drawable.tx0,"浪漫"));
users.add(new User(R.drawable.tx,"小虎"));
users.add(new User(R.drawable.tx0,"胖虎"));
users.add(new User(R.drawable.tx0,"小新"));
users.add(new User(R.drawable.tx,"蜡笔"));
users.add(new User(R.drawable.tx0,"浪漫"));
}
private void initView() {
//获取控件
RecyclerView recyclerView= (RecyclerView)this.findViewById(R.id.rv_user);
//创建线性布局管理器
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
//设置为垂直布局
linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
recyclerView.setAdapter(new MyAdapter(users));
//设置分隔线
// recyclerView.addItemDecoration( new DividerGridItemDecoration(this ));
//设置增加或删除条目的动画
// recyclerView.setItemAnimator( new DefaultItemAnimator());
}
}
7.效果图
是不是完成了ListView的功能,大家又要问了,既然ListView也能完成比这还简单,为什么还用RecyclerView呢?接下来我们看看ListView无法实现的功能 瀑布式布局 的代码实现
//设置水平布局
linearLayoutManager.setOrientation(OrientationHelper.HORIZONTAL);
//设置网格布局管理器每行3个Item
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3, OrientationHelper.VERTICAL, false);
//设置瀑布式布局管理器每行3个Item
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, OrientationHelper.VERTICAL);
总结
1.Recycler View是强制你创建ViewHolder的这样可以优化性能
2.也是可以实现水平布局和瀑布式布局的利器
后续我会讲解万能适配器让你对RecyclerView使用的更方便。