Android中RecyclerView的长按

案例:点击跳转页面,长按弹窗,点击删除。

完整代码在这里

首先,写好点击事件的接口类

 //自定义点击接口类
    public interface OnItemClickLitener {
         //点击事件
        void onItemClick(View view, int position);
        //长按事件
        void onItemLongClick(View view, int position);
    }

一、步骤
(1)在Adapter中写一个item的点击事件接口,Adapter中设置该接口,并给其一个set方法

//申明接口
 private OnItemClickLitener mOnItemClickLitener;
//设置setmOnItemClickLitener的set方法
    public void setmOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {
        this.mOnItemClickLitener = mOnItemClickLitener;
    }

(2)Adapter类实现 View.OnClickListener, View.OnLongClickListener接口,并实现其方法。实现接口的方法中,回调item的点击事件接口

 @Override
    public void onClick(View view) {
       //回调点击事件
        ViewHolder holder = (ViewHolder) view.getTag(R.id.fruite_holder);
        if (mOnItemClickLitener != null) {
            this.mOnItemClickLitener.onItemClick(view, holder.getAdapterPosition());
        }
    }

    @Override
    public boolean onLongClick(View view) {
        //回调长按事件
        ViewHolder holder = (ViewHolder) view.getTag(R.id.fruite_holder);
        if (mOnItemClickLitener != null) {
            this.mOnItemClickLitener.onItemLongClick(view, holder.getAdapterPosition());
        }
        return false;
    }

(3)在Activity中调用方法

Adapter.setmOnItemClickLitener(new ExcelAdapter.OnItemClickLitener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        //单击事件,例如跳转页面
                         Object object = list.get(position);
                        Intent intent = new Intent(getActivity(),OtherActivity.class);
                        startActivity(intent);
                    }
                   
                    @Override
                    public void onItemLongClick(View view, final int position) {
                        //长按事件,弹窗
                         Object object = list.get(position);
                        final String[] items = { "删除"};
                        android.app.AlertDialog.Builder listDialog = new android.app.AlertDialog.Builder(getActivity());
                        listDialog.setItems(items, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                Intent intent;
                                switch (i) {
                                    case 0://删除item
                                        startEditName(table);
                                        break;
                                    default:
                                        break;
                                }
                            }
                        });
                        listDialog.show();
                    }
                });

二、主要代码
adapter的完整代码

package com.example.lj.sqlapp;

import android.content.Context;
import android.media.Image;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.text.SimpleDateFormat;
import java.util.List;

/**
 * 2018-9-5
 */
public class FruiteAdapter extends RecyclerView.Adapter<FruiteAdapter.ViewHolder> implements View.OnClickListener, View.OnLongClickListener {

    private Context myContext;
    private List<Fruite> fruiteList;
    private OnItemClickLitener mOnItemClickLitener;

    //构造方法
    public FruiteAdapter(List<Fruite> fruiteList) {
        this.fruiteList = fruiteList;
    }

    //设置setmOnItemClickLitener的set方法
    public void setmOnItemClickLitener(OnItemClickLitener mOnItemClickLitener) {
        this.mOnItemClickLitener = mOnItemClickLitener;
    }

    @Override
    public FruiteAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (myContext == null) {
            myContext = parent.getContext();
        }
        View view = LayoutInflater.from(myContext).inflate(R.layout.item_list, parent, false);
        ViewHolder holder = new FruiteAdapter.ViewHolder(view);
        view.setTag(R.id.fruite_holder,holder);//注意这里,对应values/ids.xml里的value
        view.setOnClickListener(this);view.setOnLongClickListener(this);
        return holder;
    }

    @Override
    public void onBindViewHolder(FruiteAdapter.ViewHolder holder, int position) {
        Fruite fruite = fruiteList.get(position);
        holder.fruiteName.setText(fruite.getFruitrName());
       // holder.fruiteInfo.setText(fruite.getFruiteInfo());
    }

    @Override
    public int getItemCount() {
        return fruiteList.size();
    }


    public void addData(int position, Fruite fruite) {
        fruiteList.add(position, fruite);
        notifyItemInserted(position);
    }

    public void removeData(int position) {
        fruiteList.remove(position);
        notifyItemRemoved(position);
    }
    @Override
    public void onClick(View view) {
       //回调点击事件
        ViewHolder holder = (ViewHolder) view.getTag(R.id.fruite_holder);
        if (mOnItemClickLitener != null) {
            this.mOnItemClickLitener.onItemClick(view, holder.getAdapterPosition());
        }
    }

    @Override
    public boolean onLongClick(View view) {
        //回调长按事件
        ViewHolder holder = (ViewHolder) view.getTag(R.id.fruite_holder);
        if (mOnItemClickLitener != null) {
            this.mOnItemClickLitener.onItemLongClick(view, holder.getAdapterPosition());
        }
        return false;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        private CardView careView;
        private TextView fruiteName;
        private TextView fruiteInfo;
        private ImageView fruiteImg;
        public ViewHolder(View itemView) {
            super(itemView);
            fruiteImg = itemView.findViewById(R.id.card_fruit_image);
            fruiteName = itemView.findViewById(R.id.card_fruit_name);
        }
    }

    //自定义点击接口类
    public interface OnItemClickLitener {
        void onItemClick(View view, int position);
        void onItemLongClick(View view, int position);
    }
}

三、部分界面
Alt

猜你喜欢

转载自blog.csdn.net/qq_37971615/article/details/82431137