使用RecyclerView首先需要创建构造器,创建构造器后,在对应的方法中引用。代码如下
TravelRecyclerViewAdapter travelRecyclerViewAdapter = new TravelRecyclerViewAdapter(mTravelInfo, MyTravelActivity.this);
mTravelRecyclerView.setLayoutManager(new LinearLayoutManager(MyTravelActivity.this));
mTravelRecyclerView.setAdapter(travelRecyclerViewAdapter);
mTravelRecyclerView.setLayoutManager(new LinearLayoutManager(MyTravelActivity.this));
mTravelRecyclerView.setAdapter(travelRecyclerViewAdapter);
注:setLayoutManager为设置对应的布局方法,LinearLayoutmanager默认为垂直方向的布局。
如何创建构造器?通过下面3个步骤:
1、首先创建MyViewHolder继承RecyclerView.ViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder {
public MyViewHolder(View itemView) {
super(itemView);
}
}
public MyViewHolder(View itemView) {
super(itemView);
}
}
2、创建RecyclerAdapter继承Adapter<MyViewHolder>
public class TravelRecyclerViewAdapter extends RecyclerView.Adapter<TravelRecyclerViewAdapter.MyViewHolder>
3、实现适配中的三个抽象方法getItemCount()、onBindViewHolder、onCreateViewHolder
①getItemCount()表示的是RecyclerView的个数
@Override
public int getItemCount() { return null == mRespTravels ? 0 : mRespTravels.size(); } ②onCreateViewHolder中加载布局
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_travel, parent, false)); } ③onBindViewHolder中需要设值
@Override
public void onBindViewHolder(MyViewHolder holder, int position) { } |
传递数据,通过构造器
public TravelRecyclerViewAdapter(List<RespTravel.TravelInfo> respTravels, Context context) {
mRespTravels = respTravels;
mContext = context;
}
mRespTravels = respTravels;
mContext = context;
}
注:在使用RecyclerView的时候,可能会遇到如下问题:
item布局在Android Studio中预览的时候,能正常预览,但是运行到真机上match_parent属性无效
解决方法方法,使用LayoutInflater.from(context).inflate(R.layout.item, parent, false);
代码如下:
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_travel, parent, false));
}
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_travel, parent, false));
}
更正后,item布局的match_parent属性能生效了。