添加依赖关系:
implementation 'com.android.support:recyclerview-v7:28.0.0'
RecyclerView可实现线性布局,网格布局,瀑布流等
新建一个RecyclerAdapter类
public class RecyclerAdapter extends RecyclerView.Adapter<MyViewHolder> {
private Context mContext;
private ArrayList mList;
private ArrayList mheight;
RecyclerAdapter(Context context, List list,List height){
this.mContext=context;
this.mList= (ArrayList) list;
this.mheight= (ArrayList) height;
}
//创建视图
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_simgle_textview, null);
MyViewHolder viewHolder = new MyViewHolder(view);
return viewHolder;
}
//绑定视图
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
//得到控件的高度
ViewGroup.LayoutParams layoutParams = myViewHolder.tv_text.getLayoutParams();
layoutParams.height= (int) mheight.get(i);
//设置瀑布流高度
myViewHolder.tv_text.setLayoutParams(layoutParams);
//把数据内容展示出来
myViewHolder.tv_text.setText(mList.get(i).toString());
}
//数据的总数
@Override
public int getItemCount() {
return mList.size();
}
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv_text;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
tv_text = itemView.findViewById(R.id.tv_text);
}
}
主MianActivity代码
//上下文,数据,瀑布流的高度
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(this, lists, height);
recycler_view.setAdapter(recyclerAdapter);
//初始化数据
private void initData() {
lists = new ArrayList<String>();
height = new ArrayList<Integer>();
for (int i = 0; i < 35; i++) {
//添加数据的内容
lists.add(i);
//瀑布流的随机高度
height.add((int) (500 + Math.random() * 250));
}
}
设置垂直线性布局
recycler_view.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false););
设置网络布局
recycler_view.setLayoutManager (new GridLayoutManager(this, 4));
设置瀑布流
recycler_view.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
默认的垂直分割线
recycler_view.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
自定义垂直分割线
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
//分割线的高度
<size android:height="6dp"/>
//分割线的颜色
<solid android:color="@android:color/white"/>
</shape>
在代码设置自定义垂直分割线割线
DividerItemDecoration linear_divider = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
linear_divider.setDrawable(ContextCompat.getDrawable(this, R.drawable.linear_divider));
recycler_view.addItemDecoration(linear_divider);
删增的默认动画效果
recycler_view.setItemAnimator(new DefaultItemAnimator());
处理RecyclerView点击事件
//定义接口
public interface OnItemClickListener{
void onItemClick(View view,int position);
void onItemLongClick(View view,int position);
}
private OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener listener){
this.mOnItemClickListener=listener;
}
@Override
public void onBindViewHolder(final MyViewHolder myViewHolder, int i) {
myViewHolder.tv_text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取item的位置
int position = myViewHolder.getLayoutPosition();
//单击事件
mOnItemClickListener.onItemClick(myViewHolder.tv_text,position);
}
});
myViewHolder.tv_text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取item的位置
int position = myViewHolder.getLayoutPosition();
//长按事件
mOnItemClickListener.onItemLongClick(myViewHolder.tv_text,position);
}
});
在MainActivity代码中调用
recyclerAdapter.setOnItemClickListener(new RecyclerAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this,"单击"+position,Toast.LENGTH_LONG).show();
}
@Override
public void onItemLongClick(View view, int position) {
Toast.makeText(MainActivity.this,"长按"+position,Toast.LENGTH_LONG).show();
}
});