通过一个简单的小例子,熟悉使用RecyclerView。本例的要求是使用RecyclerView来显示头像和对应的文字介绍。类似QQ好友列表。
1.首先在Layout文件中调用RecyclerView,在使用RecyclerView之前需要添加依赖。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--需要使用完整的包名-->
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
2.编写每一个子项的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv_avatar"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/fifth"/>
<TextView
android:id="@+id/tv_avatar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="avatar"
android:layout_toRightOf="@id/iv_avatar"
android:layout_alignBottom="@id/iv_avatar"/>
</RelativeLayout>
3.创建适配器
package com.example.lenovo.ui;
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 lenovo on 2017/7/4.
*/
public class AvatarAdapter extends RecyclerView.Adapter<AvatarAdapter.ViewHolder> {
//数据源,存放每一项的图片资源ID和文字内容
private List<Avatar> myAvatar ;
//在适配器实例化时,给数据源赋值
public AvatarAdapter(List<Avatar> avatars){
myAvatar = avatars;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//加载布局文件
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.avatar_item, parent, false);
//实例化ViewHolder
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//获取对应位置上的avatar对象
Avatar avatar = myAvatar.get(position);
//设置图片源
holder.iv_avatar.setImageResource(avatar.getImageId());
//设置文字内容
holder.tv_avatar.setText(avatar.getAvatarName());
}
@Override
public int getItemCount() {
//返回子项总数
return myAvatar.size();
}
//静态内部类
static class ViewHolder extends RecyclerView.ViewHolder{
//图片控件
ImageView iv_avatar;
//文本控件
TextView tv_avatar;
public ViewHolder(View itemView) {
super(itemView);
//获取控件对象
iv_avatar = (ImageView) itemView.findViewById(R.id.iv_avatar);
tv_avatar = (TextView) itemView.findViewById(R.id.tv_avatar);
}
}
}
4.在主活动中调用以及显示
package com.example.lenovo.ui;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.List;
public class RecyclerActivity extends AppCompatActivity {
protected List<Avatar> avatarList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recycler_view);
//初始化数据源
initAvatar();
//获取RecyclerView控件
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv_recycler);
//获取布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
//实例化适配器
AvatarAdapter adapter = new AvatarAdapter(avatarList);
//设置适配器
recyclerView.setAdapter(adapter);
}
public void initAvatar(){
for(int i=0; i<4; i++){
Avatar avatar1 ;
if(i == 1)
avatar1 = new Avatar("avatar12", R.drawable.first);
else
avatar1 = new Avatar("avatar12", R.drawable.first);
avatarList.add(avatar1);
Avatar avatar2 = new Avatar("avatar2", R.drawable.second);
avatarList.add(avatar2);
Avatar avatar3 = new Avatar("avatar3", R.drawable.third);
avatarList.add(avatar3);
Avatar avatar4 = new Avatar("avatar4", R.drawable.fourth);
avatarList.add(avatar4);
Avatar avatar5 = new Avatar("avatar5", R.drawable.fifth);
avatarList.add(avatar5);
}
}
}