1、RecyclerView:5.0之后的控件,扩展优化,吸收了
2、ViewHolder./RecyclerView的adapter与BaseAdapter不同
3、RecyclerView的adapter:只负责创建holder,给holder设置展示的数据。
步骤分析:1、先添加依赖库,File-->project stru-->选中module,Dependes--->加号-->选择recyvlerview的包,添加
创建相关页面Activity--layout:并且实例化相应控件
2、自定义item布局
3、创建实体类
4、搭建数据集:List<实体类>
5、Adapter:ViewHolder:实例化控件
自定义Adapter步骤:
a、先创建一个ViewHolder的内部类MyHolder继承于ViewHolder,在内部类中实例化控件属性
b、让主类RecyclePhoneAdapter继承于RecycleView下的adapter并且给Adapter加上内部类的泛型
主要为了重写3个方法时候不用再强转返回值类型(不设置泛型返回值为父类)
c、新建自定义adapter完成后要在对应主Java代码中( RecyclePhoneAdapter adapter=new RecyclePhoneAdapter(this,list);)使用
并且设置展示样式(
rv_phone.setLayoutManager(new LinearLayoutManager(this));
rv_phone.setAdapter(adapter);)
ps;
rv_phone.addItemDecoration(new DividerItemDecoration(this,LinearLayoutManager.VERTICAL));
自定义Adapter代码样例:
public class RecyclePhoneAdapter extends RecyclerView.Adapter<RecyclePhoneAdapter.MyHolder> implements View.OnClickListener{
private Context pContext;
private List<PhoneEntity> list;
private LayoutInflater inflater;
private OnItemClick ItemClickListener=null;
public void setItemClickListener(OnItemClick itemClickListener) {
ItemClickListener = itemClickListener;
}
public RecyclePhoneAdapter(Context pContext, List<PhoneEntity> list) {
this.pContext = pContext;
this.list = list;
inflater=LayoutInflater.from(pContext);
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=inflater.inflate(R.layout.activity_phone_list,parent,false);
MyHolder holder=new MyHolder(view);
holder.itemView.setOnClickListener(this);
return new MyHolder(view);
}
@Override
public void onBindViewHolder(MyHolder holder, int position) {
PhoneEntity phone=list.get(position);
holder.phone_name.setText(phone.getName());
holder.img_phone.setImageResource(phone.getImg());
holder.phone_price.setText(phone.getPrice());
holder.phone_counter.setText(phone.getCountNum());
holder.itemView.setTag(position);
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public void onClick(View v) {
if(ItemClickListener!=null){
ItemClickListener.onitemclick(Integer.parseInt(v.getTag().toString()));
}
}
class MyHolder extends RecyclerView.ViewHolder{
private ImageView img_phone;
private TextView phone_name;
private TextView phone_price;
private TextView phone_counter;
public MyHolder(View itemView) {
super(itemView);
img_phone= (ImageView) itemView.findViewById(R.id.img_phone);
phone_name= (TextView) itemView.findViewById(R.id.phone_name);
phone_price= (TextView) itemView.findViewById(R.id.phone_price);
phone_counter= (TextView) itemView.findViewById(R.id.phone_counter);
}
}
public interface OnItemClick{
void onitemclick(int position);
}