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 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;
    }
}

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在 RecyclerView 实现删除功能,可以按照以下步骤: 1. 在 RecyclerView 的 Item 布局添加一个删除按钮。 2. 在 RecyclerView 的 Adapter 实现一个接口 OnItemLongClickListener,用来监听按事件。 3. 在接口的方法处理按事件,弹出一个 Dialog 对话框,询问用户是否要删除该项数据。 4. 如果用户确定删除,则在 Adapter 删除该项数据,并通知 RecyclerView 更新 UI。 下面是一个伪代码示例,仅供参考: ```java public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { private List<MyData> mDataList; private Context mContext; private OnItemLongClickListener mOnItemLongClickListener; // 构造方法 public MyAdapter(List<MyData> dataList, Context context) { mDataList = dataList; mContext = context; } // 设置按监听器 public void setOnItemLongClickListener(OnItemLongClickListener listener) { mOnItemLongClickListener = listener; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // 创建 ViewHolder View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_layout, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { // 绑定数据 MyData data = mDataList.get(position); holder.mTextView.setText(data.getText()); holder.mDeleteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 删除该项数据 mDataList.remove(position); notifyItemRemoved(position); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { // 触发按事件 if (mOnItemLongClickListener != null) { mOnItemLongClickListener.onItemLongClick(position); } return true; } }); } @Override public int getItemCount() { // 获取数据项数量 return mDataList.size(); } // 定义按监听器接口 public interface OnItemLongClickListener { void onItemLongClick(int position); } } ``` 在 Activity 或 Fragment ,你可以这样使用: ```java MyAdapter adapter = new MyAdapter(dataList, context); adapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() { @Override public void onItemLongClick(int position) { // 弹出确认删除的对话框 AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("确认删除") .setMessage("确定要删除该项数据吗?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 用户点击确定,删除该项数据 dataList.remove(position); adapter.notifyItemRemoved(position); } }) .setNegativeButton("取消", null) .show(); } }); recyclerView.setAdapter(adapter); ``` 上面的代码只是一个示例,具体实现方式可能因项目需求而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值