RecyclerView

添加依赖关系:
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();
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值