RecyclerView与listView类似,也有adapter
1)添加v7类库
2) 视图中添加RecyclerView控件
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
3) 新建list_cell.xml 自定义样式
如下: 一个ImageView 和一个TextView
<?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"
android:orientation="vertical">
<ImageView
android:id="@+id/ivTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp" />
<TextView
android:id="@+id/tvContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingBottom="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp" />
</LinearLayout>
4) 建立Data类
public class Titles {
private int ivTitleSrc;
private String tvTitle;
public Titles(int ivTitleSrc,String tvTitle){
this.ivTitleSrc = ivTitleSrc;
this.tvTitle = tvTitle;
}
public int getIvTitle() {
return ivTitleSrc;
}
public String getTvContent() {
return tvTitle;
}
}
5) 建立MyAdapter继承RecyclerView.Adapter, 并创建内部类ViewHolder, 在ViewHolder中实现对布局文件的实例化.
在onBindViewHolder()中实现对数据的赋值; 在onCreateViewHolder中创建布局; getItemCount()中返回view item的数量.
public class myAdapter extends RecyclerView.Adapter{
class ViewHolder extends RecyclerView.ViewHolder{
private View root;
private ImageView imageView;
private TextView textView;
public ViewHolder(View root) {
super(root);
imageView = (ImageView) root.findViewById(R.id.ivTitle);
textView = (TextView) root.findViewById(R.id.tvContent);
}
public ImageView getImageView() {
return imageView;
}
public TextView getTextView() {
return textView;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_cell,null));//创建布局
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHolder vh = (ViewHolder) holder;
Titles title = titles[position];
Log.d("title : ",title.toString());
vh.getImageView().setImageResource(title.getIvTitle());
vh.getTextView().setText(title.getTvContent().toString());
}
@Override
public int getItemCount() {
return titles.length;
}
private Titles[] titles = new Titles[]{
new Titles(R.drawable.order_status_money_icon,"费用"),
new Titles(R.drawable.order_status_rider_icon,"订单"),
new Titles(R.drawable.order_status_service_icon,"服务"),
new Titles(R.drawable.order_status_shop_icon,"商店"),
new Titles(R.drawable.order_status_user_icon,"用户"),
new Titles(R.drawable.order_status_money_icon,"费用"),
new Titles(R.drawable.order_status_rider_icon,"订单"),
new Titles(R.drawable.order_status_service_icon,"服务"),
new Titles(R.drawable.order_status_shop_icon,"商店"),
new Titles(R.drawable.order_status_user_icon,"用户"),
new Titles(R.drawable.order_status_money_icon,"费用"),
new Titles(R.drawable.order_status_rider_icon,"订单"),
new Titles(R.drawable.order_status_service_icon,"服务"),
new Titles(R.drawable.order_status_shop_icon,"商店"),
new Titles(R.drawable.order_status_user_icon,"用户"),
};
}
6) MainActivity onCreate()中实例化RecyclerView(注意一定要定义一个布局管理器,否则界面不显示)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv = (RecyclerView) findViewById(R.id.rv);
rv.setLayoutManager(new GridLayoutManager(this,4));
myAdapter adapter = new myAdapter();
rv.setAdapter(adapter);
}
Fragment onCreateView()中实例化RecyclerView
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.home_page_fragment, container, false);
rv = (RecyclerView) root.findViewById(R.id.rv);
rv.setLayoutManager(new GridLayoutManager(getContext(), 4));
MyRecyclerViewAdapter adapter = new MyRecyclerViewAdapter();
rv.setAdapter(adapter);
return root;
}