【问题标题】:Android: RecyclerView adapter longClickListener not workingAndroid:RecyclerView 适配器 longClickListener 不工作
【发布时间】:2016-05-01 00:57:39
【问题描述】:

我试图在我的Fragment 中使用longClickListener,但由于某种原因它无法正常工作。如果我长按,onItemClickListener 会收到事件

这是我的代码

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.util.ArrayList;

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
    private ArrayList<Info> Infos;
    private ClickListener clickListener;
    private MyLongClickListener myLongClickListener;

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
        // each data item is just a string in this case
        public ImageView image;
        public/* Roboto */ TextView name;
        public/* Roboto */ TextView companyName;
        public/* Roboto */ TextView city;
        public/* Roboto */ TextView time;
        public/* Material */ TextView icon;

        public ViewHolder(View convertView) {
            super(convertView);
            companyName = (TextView) convertView
                    .findViewById(R.id.t1);
            city = (TextView) convertView
                    .findViewById(R.id.t2);
            convertView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            clickListener.onItemClick(getPosition(), v);
        }

        @Override
        public boolean onLongClick(View v) {
            myLongClickListener.onItemLongClick(getPosition(), v);
            return true;
        }
    }

    public void add(int position, Info item) {
        Infos.add(position, item);
        notifyItemInserted(position);
    }


    // Provide a suitable constructor (depends on the kind of dataset)
    public RecyclerViewAdapter(ArrayList<Info> dummyModelList) {
        Infos = dummyModelList;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                             int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.genre_list_item, parent, false);
        // set the view's size, margins, paddings and layout parameters
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        Info currInfo = Infos.get(position);

        holder.city.setText(currInfo.getTitle());
        holder.companyName.setText(currInfo.getArtist());

    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return Infos.size();
    }


    public void setOnItemClickListener(ClickListener clickListener) {
        this.clickListener = clickListener;
    }

    public void setOnItemLongClickListener(MyLongClickListener clickListener) {
        this.myLongClickListener = clickListener;
    }

    public interface ClickListener {
        void onItemClick(int position, View v);
    }

    public interface MyLongClickListener {
        boolean onItemLongClick(int position, View v);
    }
}

这就是我在Fragment 中使用它的方式。这个onLongClickonItemClickListener都放在FragmentonResume函数中。

recyclerViewAdapter.setOnItemLongClickListener(new
    RecyclerViewAdapter.MyLongClickListener() {
        @Override
        public boolean onItemLongClick(int position, View v) {
            // Task
            return true;
        }
});

我在我的代码中看不到任何错误,但不知道为什么它不起作用。触摸事件总是由onItemClickListener 接收。任何帮助将不胜感激,谢谢!!!

【问题讨论】:

    标签: android android-recyclerview onitemlongclicklistener


    【解决方案1】:

    在您的构造函数中设置 click 和 onclicklisteners。

            convertView.setOnClickListener(this);
            convertView.setOnLongClickListener(this);
    

    没有setOnLongClickListener,你就听不到长按。

    【讨论】:

    • 这很尴尬,我怎么会忘记添加这个。非常感谢大佬指出!!你为我节省了很多时间。
    • 很高兴听到它帮助了你。你应该从经验中吸取教训,否则下次会更痛苦;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 2014-05-13
    相关资源
    最近更新 更多