- 前言
- 一、继承RecyclerView.Adapter实现adapter
- 1.首先自定义一个item
- 2.在自定义MyAdapter中实现内部类MyViewHolder
- 3.继承RecyclerView.Adapter
- 4.我们还需要有一个更新数据的方法
- 5.在MainActivity中设置ReyclerView
- 二、点击事件的设置
- 1.方法一(接口方法)
- 2.方法二
前言 从学习使用来说Listview和RecyclerView基本都可以实现相同的功能,相比较之下Listview更容易实现。但是RecyclerView从使用上来说,增加了设置LayoutMananger可以设置线性、表格、瀑布不同的布局,并且避免了每个item绑定控件带来的资源消耗,内部也自定义一些动画效果,方便使用。但实际选择中,还是要看开发的需求。
一、继承RecyclerView.Adapter实现adapter 1.首先自定义一个item
注意:此处的LinerLayout的layout_height要注意不要写成match_parent,不然就会出现一个item占一整个页面的尴尬情况。
class MyViewHolder extends RecyclerView.ViewHolder{
ImageView mIv;
TextView mTv;
public MyViewHolder(View itemView) {
super(itemView);
mIv=itemView.findViewById(R.id.iv);
mTv=itemView.findViewById(R.id.tv);
}
}
说明:这里进行了item中的控件绑定。
3.继承RecyclerView.Adapterprivate List说明:这里重写了三个方法onCreateViewHolder在调用 mRecyclerView.setAdapter中初始化没有被初始化过的item,xml➡view➡MyViewHolder。 onBindViewHolder为每一条item填充数据。 getItemCount()获得item的长度。 4.我们还需要有一个更新数据的方法dataSource; private Context mContext; private RecyclerView mRv; public MyReyclerViewAdapter(Context context,RecyclerView recyclerView){ mContext=context; dataSource=new ArrayList<>(); mRv=recyclerView; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater= LayoutInflater.from(mContext); View view=inflater.inflate(R.layout.item_layout,parent,false); MyViewHolder myViewHolder=new MyViewHolder(view); return myViewHolder; } @Override public void onBindViewHolder(MyReyclerViewAdapter.MyViewHolder holder, int position) { holder.mIv.setImageResource(getIcon(position)); holder.mTv.setText(dataSource.get(position)); } @Override public int getItemCount() { return dataSource.size(); }
public void setDataSource(ListdataSource) { this.dataSource = dataSource; notifyDataSetChanged(); }
说明:notifyDataSetChanged()方法可以刷新adapter
5.在MainActivity中设置ReyclerView //线性布局
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
//横向排列ItemView
//linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
//数据反向展示
linearLayoutManager.setReverseLayout(true);
mRecyclerView.setLayoutManager(linearLayoutManager);
mReyclerViewAdapter=new MyReyclerViewAdapter(this,mRecyclerView);
mRecyclerView.setAdapter(mReyclerViewAdapter);
二、点击事件的设置
1.方法一(接口方法)
在adpter中
private OnItemClickListener mItemClickListener;
public void setOnclickItem(OnclickItem onclickItem) {
this.onclickItem = onclickItem;
}
public interface OnclickItem{
public void onItemClick(int position);
}
@Override
public void onBindViewHolder(@NonNull @NotNull LinerAdaper.LinerViewHolder holder, int position) {
if(onclickItem!=null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onclickItem.onItemClick(position);
}
});
}
}
在实例化ReyclerView activity中设置
mAdapter.setOnclickItem(new LinerAdaper.OnclickItem() {
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this,"我是"+position,Toast.LENGTH_SHORT).show();
}
});
2.方法二
在实例化ReyclerView activity中设置addOnItemTouchListener
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(@NonNull @NotNull RecyclerView rv, @NonNull @NotNull MotionEvent e) {
return false;
}
@Override
public void onTouchEvent(@NonNull @NotNull RecyclerView rv, @NonNull @NotNull MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});



