如何在android的recyclerview中创建click listener?

如何在android的recyclerview中创建click listener?,android,Android,我有一个“回收者”视图,其中包含列表中的一些项目,并且在单个项目中包含一个按钮。我想对按钮单击特定项执行一些操作我实现了回收器视图适配器,但不想在按钮单击适配器中实现代码我想在包含回收器视图实现的fragmenr中执行操作。我该怎么做 适配器的代码 public class ViewHolder extends RecyclerView.ViewHolder { TextView m_premiumText, m_getDealText; public ViewHolder(

我有一个“回收者”视图,其中包含列表中的一些项目,并且在单个项目中包含一个按钮。我想对按钮单击特定项执行一些操作我实现了回收器视图适配器,但不想在按钮单击适配器中实现代码我想在包含回收器视图实现的fragmenr中执行操作。我该怎么做

适配器的代码

 public class ViewHolder extends RecyclerView.ViewHolder {
    TextView m_premiumText, m_getDealText;

    public ViewHolder(View itemView) {
        super(itemView);
        m_premiumText = (TextView) itemView.findViewById(R.id.tv_premiun_deals);
        m_getDealText = (TextView) itemView.findViewById(R.id.tv_get_deals);

        m_getDealText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext,"clicked"+getAdapterPosition(),Toast.LENGTH_LONG).show();
            }
        });
    }
}
回收器视图代码

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    mContext = getActivity();
    main = inflater.inflate(R.layout.reward_premium_deals, container, false);
    findViewById();
    initControls();
    return main;
}


public void findViewById() {
    m_premiumList = (RecyclerView) main.findViewById(R.id.premium_list);
    m_layoutManager = new LinearLayoutManager(mContext);
    m_premiumList.setLayoutManager(m_layoutManager);

}

public void initControls() {
    premiumNames = getResources().getStringArray(R.array.premium_deals_title);
    m_premiumDealsAdapter = new CPremiumDealsAdapter(mContext, premiumNames);
    m_premiumList.setAdapter(m_premiumDealsAdapter);

    /*here i want button click action*/


}

在这些情况下,您必须使用侦听器或回调,并通过构造函数将其发送到回收器视图适配器

首先创建一个新接口用作回调。然后在片段中实现该接口,然后将片段(this)作为侦听器发送到适配器。然后,您可以从您的recycler view实例调用该操作。

由此,我在我的
活动
类中的
片段
中实现了recycler view项

  • 接口类:

    public interface RecyclerViewClickListener {
        void onClick(View view, int position);
        void onLongClick(View view, int position);
    }
    
  • RecyclerViewTouchListener类:

    public class RecyclerViewTouchListener implements RecyclerView.OnItemTouchListener {
    private GestureDetector gestureDetector;
    private RecyclerViewClickListener recyclerViewClickListener;
    
    public RecyclerViewTouchListener(Context context, final RecyclerView recyclerView, final RecyclerViewClickListener recyclerViewClickListener1) {
        recyclerViewClickListener = recyclerViewClickListener1;
        gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
    
            @Override
            public void onLongPress(MotionEvent e) {
                View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                if (child != null && recyclerViewClickListener1 != null){
                    recyclerViewClickListener.onLongClick(child, recyclerView.getChildLayoutPosition(child));
                }
            }
        });
    }
    
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        View child = rv.findChildViewUnder(e.getX(), e.getY());
        if (child != null && recyclerViewClickListener != null && gestureDetector.onTouchEvent(e)){
            recyclerViewClickListener.onClick(child, rv.getChildLayoutPosition(child));
        }
        return false;
    }
    
    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {
    
    }
    
    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
    
    }
    }
    
  • 现在,在
    片段
    活动
    类中,您必须在其中设置回收器视图活动:

    recyclerView.setAdapter(your_adapter_class_object);
    recyclerView.addOnItemTouchListener(new RecyclerViewTouchListener(this, recyclerView, new RecyclerViewClickListener() {
        @Override
        public void onClick(View view, int position) {
            Loge("Item","Click");
        }
    
        @Override
        public void onLongClick(View view, int position) {
            Loge("Item","Long Click");
        }
    }));
    

  • 在这方面已经有数百万的资源。如果您有关于实现的具体问题,请创建该问题。可能的副本