Recyclerview控件使用,多条目展示介绍,Recyclerview点击事件(单击、长按[删除])。

RecylerView:

RecyclerView是support-v7包中的新添加控件,是一个强大的滑动展示控件;

适配器:RecylerView自带适配器,继承RecylerView.Adapter即可,自定义ViewHolder传给适配器泛型;

多条目展示:多条目展示也就是分开了几种条目类型,重写 getItemViewType(),定义俩个常量控制条目切换;

点击事件(单击、长按):在适配器里自定义接口,实现接口回调,在用onBindViewHolder()方法里,获取当前条目设置点击事件,在里面调用接口抽象方法,传给他当前条目位置和样式,在将参数赋值到接口抽象方法里,然后再去用适配器调用即可,具体实现看下方代码;

 

1.导依赖:implementation 'com.android.support:recyclerview-v7:28.+'

2.布局文件

 <android.support.v7.widget.RecyclerView
        android:id="@+id/rlv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

3.实现代码


    private RecyclerView rlv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);
        //控件
        rlv = findViewById(R.id.rlv);
        //实例化p
        presenter = new ShowPresenter(this);
        //创建布局管理器
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        //设置RecycleView展示类型
        rlv.setLayoutManager(linearLayoutManager);
        //设置条目之间的的间距
        //rlv.addItemDecoration(new SpaceItemDecoration(30));
        //添加分割线
        //rlv.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL));
        //传参
        presenter.onRelated();
    }

    @Override
    public void getViewData(String json) {
        Gson gson = new Gson();
        Jsonbean jsonbean = gson.fromJson(json, Jsonbean.class);
        List<Jsonbean.DataBean> data = jsonbean.getData();
        if (data!=null){
            ShowAdapter showAdapter = new ShowAdapter(data, ShowActivity.this);
            rlv.setAdapter(showAdapter);
            //单击事件
            showAdapter.setOnItemClickListener(new ShowAdapter.onItemClickListener() {
                @Override
                public void onItemClick(View view, int position) {
                    Toast.makeText(ShowActivity.this,"单击",Toast.LENGTH_SHORT).show();
                }
            });
            //长按事件
            showAdapter.setOnItemLongClickListener(new ShowAdapter.onItemLongClickListener() {
                @Override
                public void onItemLongClick(View view, int position) {
                     /**
                      * 长按删除
                      */
                     data.remove(position);
                     showAdapter.notifyItemRangeRemoved(position,1);
                    Toast.makeText(ShowActivity.this,"删除成功",Toast.LENGTH_SHORT).show();
                    Toast.makeText(ShowActivity.this,"长按",Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

4:适配器写法 

public class ShowAdapter extends RecyclerView.Adapter<ShowAdapter.myViewHolder> {
    List<Jsonbean.DataBean> data;
    Context context;
    final static int TYPE_ONE = 0;
    final static int TYPE_TWO = 1;

    public ShowAdapter(List<Jsonbean.DataBean> data, Context context) {
        this.data = data;
        this.context = context;
    }

    @Override
    public int getItemViewType(int position) {
        //多条目类型
        return position % 2;
    }

    @NonNull
    @Override
    public myViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        if (TYPE_ONE == i) {
            //引入条目布局
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.one_item, null, false);
            //传值给ViewHolder
            myViewHolder myViewHolder = new myViewHolder(view);
            return myViewHolder;
        } else {
            //引入条目布局
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.two_item, null, false);
            //传值给ViewHolder
            myViewHolder myViewHolder = new myViewHolder(view);
            return myViewHolder;
        }
    }

    @Override
    public void onBindViewHolder(@NonNull final myViewHolder myViewHolder, int i) {
        //获取当前条目布局类型
        int itemViewType = getItemViewType(i);
        
        //取到集合bean对象
        Jsonbean.DataBean dataBean = data.get(i);
        if (itemViewType == TYPE_ONE) {
            myViewHolder.title1.setText(dataBean.getTitle());
            myViewHolder.time1.setText(dataBean.getDate());
             /**
             * 加载圆形图片
             */
            Glide.with(context).load(dataBean.getThumbnail_pic_s())
            .apply(RequestOptions.bitmapTransform(new CircleCrop())).into(myViewHolder.img);
            
        } else {
            myViewHolder.title2.setText(dataBean.getTitle());
            myViewHolder.time2.setText(dataBean.getDate());
        }
        /**
         * 判断接口是否设置监听
         */

        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //当前条目的位置
                int position = myViewHolder.getLayoutPosition();
                //当前条目样式
                View itemView = myViewHolder.itemView;
                //调用接口方法
                if (itemClickListener != null) {
                    itemClickListener.onItemClick(itemView, position);
                }
            }
        });

        myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                //当前条目的位置
                int position = myViewHolder.getAdapterPosition();
                //当前条目样式
                View itemView = myViewHolder.itemView;
                //调用接口方法
                if (itemLongClickListener != null) {
                    itemLongClickListener.onItemLongClick(itemView, position);
                }
                return true;
            }
        });

    }

    @Override
    public int getItemCount() {
        //条目数量
        return data.size();
    }

    public class myViewHolder extends RecyclerView.ViewHolder {

        private final TextView title1;
        private final TextView title2;
        private final TextView time1;
        private final TextView time2;
        private final ImageView img;

        public myViewHolder(@NonNull View itemView) {
            super(itemView);
            //找到条目布局里面的控件

            title1 = itemView.findViewById(R.id.title1);
            title2 = itemView.findViewById(R.id.title2);
            time1 = itemView.findViewById(R.id.time1);
            time2 = itemView.findViewById(R.id.time2);
            img = itemView.findViewById(R.id.img);
        }
    }

    //条目单击接口
    public interface onItemClickListener {
        void onItemClick(View view, int position);
    }

    //条目长按接口
    public interface onItemLongClickListener {
        void onItemLongClick(View view, int position);
    }

    //声明接口
    public onItemClickListener itemClickListener;
    public onItemLongClickListener itemLongClickListener;

    //设置提供监听方法
    public void setOnItemClickListener(ShowAdapter.onItemClickListener onItemClickListener) {
        this.itemClickListener = onItemClickListener;
    }

    public void setOnItemLongClickListener(ShowAdapter.onItemLongClickListener onItemLongClickListener) {
        this.itemLongClickListener = onItemLongClickListener;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43917449/article/details/87386988
今日推荐