安卓 Recyclerview(三种排列方式)

Recyclerview基础+接口回调点击事件+多布局+随机值生成瀑布流

效果图1

在这里插入图片描述

效果图2

在这里插入图片描述

效果图3(瀑布流)

在这里插入图片描述

java代码

// An highlighted block
package bw.com.androidthird;

import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;

import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    ArrayList<String> list;
    RVAdapetr rvAdapetr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.rv);
		//线性布局
//        LinearLayoutManager manager = new LinearLayoutManager(this);
//        manager.setOrientation(LinearLayoutManager.VERTICAL);//指定布局的方向
//        recyclerView.setLayoutManager(manager);//设置布局  
			//网格
//        GridLayoutManager gridLayoutManager = new GridLayoutManager(this,2);
//        recyclerView.setLayoutManager(gridLayoutManager);//设置布局

        //瀑布流
        StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(manager);

        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this,DividerItemDecoration.VERTICAL);//垂直
        Drawable drawable = getResources().getDrawable(R.drawable.recycleview_item_divder_style);//把样式文件
        dividerItemDecoration.setDrawable(drawable);
//        dividerItemDecoration.setDrawable(getDrawable(R.drawable.recycleview_item_divder_style));
        recyclerView.addItemDecoration(dividerItemDecoration);

        DefaultItemAnimator animator = new DefaultItemAnimator();
        animator.setRemoveDuration(200);
        animator.setAddDuration(200);
        recyclerView.setItemAnimator(animator);//设置动画

        initData();

        rvAdapetr = new RVAdapetr(MainActivity.this,list);
        recyclerView.setAdapter(rvAdapetr);//设置适配器

        rvAdapetr.setLisnter(new RecyclerViewLisnter() {
            @Override
            public void itemClick(int i) {
                //点击事件
//                list.remove(i);//删除数据
//                rvAdapetr.notifyItemRemoved(i);//删除动画
//                rvAdapetr.notifyItemRangeChanged(0,list.size());//删除后更新下标
                rvAdapetr.deleteData(i);
            }

            @Override
            public void longClick(int i) {
                //长按事件
                ArrayList<String> newList = new ArrayList<>();
                newList.add("张三");
                newList.add("李四");
                newList.add("王五");
//                list.addAll(newList);
//                rvAdapetr.notifyDataSetChanged();
                rvAdapetr.addData(newList);
            }
        });

    }



    public void initData(){
        list = new ArrayList<>();
        for (int i= 65;i<91;i++){
            char c = (char)i;
            list.add(c+"");
        }
    }

}

适配器代码

// An highlighted block
package bw.com.androidthird;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;

public class RVAdapetr extends RecyclerView.Adapter<RVAdapetr.RVholder>{

    Context context;
    ArrayList<String> data;
    RecyclerViewLisnter lisnter;

    public RVAdapetr(Context context, ArrayList<String> data){
        this.context =context;
        this.data = data;
    }

    public void setLisnter(RecyclerViewLisnter lisnter){
        this.lisnter = lisnter;
    }

    @NonNull
    @Override
    public RVholder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(context).inflate(R.layout.layout_rv,viewGroup,false);
        return new RVholder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RVholder rVholder, final int i) {
        rVholder.textView.setText(data.get(i));//给控件设置数据源

        int num = (int) (Math.random()*101+100);//*最大-最小+1,+最小
//        rVholder.textView.setHeight(num);
        ViewGroup.LayoutParams params = rVholder.textView.getLayoutParams();
        params.height = num;
        rVholder.textView.setLayoutParams(params);

        rVholder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                lisnter.itemClick(i);
            }
        });


        rVholder.textView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                lisnter.longClick(i);
                return true;
            }
        });

    }

    @Override
    public int getItemCount() {
        return data.size();
    }
    /**
     *
     * */
    public void addData(ArrayList<String> newList){
        data.addAll(newList);
        notifyDataSetChanged();
        notifyItemInserted(0);
    }

    public void deleteData(int index){
        data.remove(index);
        notifyItemRemoved(index);
        notifyItemRangeChanged(index,data.size());
    }

    public void updateData(ArrayList<String> refreshList){
        data.clear();
        data.addAll(refreshList);
        notifyDataSetChanged();
    }


    class RVholder extends RecyclerView.ViewHolder{
        private TextView textView;
        public RVholder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.text01);
        }
    }

}


接口

// An highlighted block
package bw.com.androidthird;

public interface RecyclerViewLisnter {

    public void itemClick(int i);
    public void longClick(int i);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值