添加依赖
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.github.bumptech.glide:glide:4.7.1'
如果需要加载网络图片则需要添加Glide的模块依赖
在xml文件中添加RecyclerView的控件
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
也可以直接添加控件

新建一个item的布局文件,绘制需要显示的item样式

新建一个Item类用于设置列表条目要显示的内容
/**
* 定义一个Item类用于保存每个条目的详细信息
*/
public class Item {
private String imgUrl;
private String title;
private String name;
private int favorites;
private int comments;
public Item(String imgUrl,String title,String name,int favorites,int comments){
this.imgUrl = imgUrl;
this.title = title;
this.name = name;
this.favorites = favorites;
this.comments =comments;
}
public String getImgUrl() {
return imgUrl;
}
public String getTitle() {
return title;
}
public String getName() {
return name;
}
public int getFavorites() {
return favorites;
}
public int getComments() {
return comments;
}
}
接下来新建一个ItemFactory工厂类用于制造每个item
/**
* 定义一个ItemFactory用于制造Item 对象
*/
public class ItemFactory {
private static String[] imgUrls = {
//填入要显示的网络图片地址
};
private static String[] titles = {
//填入要显示的标题
};
private static String[] names = {
//填入要显示的姓名
};
public static List<Item> createItem(int num){
Random random = new Random();
List<Item> items = new ArrayList<>();
int arrySize = imgUrls.length;
for (int i=0;i < num;i++){
int a = i%arrySize;
String url = imgUrls[a];
String title = titles[a];
String name = names[a];
int favorites = random.nextInt(10000);
int comments = random.nextInt(10000);
items.add(new Item(url,title,name,favorites,comments));
}
return items;
}
}
接下来是最重要的添加适配器的过程
/**
* 适配器继承自RecyclerView.Adapter,<>里面是泛型MyHolder
*/
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyHolder>{//需要复写三个方法
Context context;
private List<Item> list;
public RecyclerAdapter(Context context,List<Item> list){//传入一个显示列表,控制显示的条目数量
this.list = list;
this.context = context;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//填充一个布局到ViewHolder里面
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false);
MyHolder myHolder = new MyHolder(view);
return myHolder;
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder, int position) {
Item item = list.get(position);
//利用Glide加载网络图片
Glide.with(context).load(item.getImgUrl()).into(holder.imageView);
holder.title.setText(item.getTitle());
holder.name.setText(item.getName());
holder.favorites.setText(String.valueOf(item.getFavorites()));
holder.comments.setText(String.valueOf(item.getComments()));
}
@Override
public int getItemCount() {
//返回条目的数量
return list.size();
}
/**
* 自定义MyHolder继承自ViewHolder,用于控制每个item的元素,可以为单独的某个控件设置值
*/
class MyHolder extends RecyclerView.ViewHolder{
RelativeLayout itemLayout;
ImageView imageView;
TextView title;
TextView name;
TextView favorites;
TextView comments;
MyHolder(View itemView) {
super(itemView);
itemLayout = itemView.findViewById(R.id.item_layout);
imageView = itemView.findViewById(R.id.iv_item);
title = itemView.findViewById(R.id.text_item);
name = itemView.findViewById(R.id.tv_name);
favorites = itemView.findViewById(R.id.tv_favorite);
comments = itemView.findViewById(R.id.tv_comment);
}
}
}
最后一步是在Activity文件中实例化RecyclerView和它的适配器
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private RecyclerAdapter adapter;
List<Item> list = ItemFactory.createItem(100);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
adapter = new RecyclerAdapter(this,list);
//设置LayoutManager
mRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
//设置动画效果
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
//设置适配器
mRecyclerView.setAdapter(adapter);
//添加默认的分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
}
}
网友评论