如何在RecyclerView项单击上实现两个OnClickListeners? [英] How to implement two OnClickListeners on RecyclerView item click?

本文介绍了如何在RecyclerView项单击上实现两个OnClickListeners?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很困惑,因为我需要使用两个OnClickListeners来满足两个不同的需求. 我有一个Recyclerview,一旦按下他的任何一项,就需要对其进行更改,并且我已经成功地使用OnBindViewHolder.itemView.setOnClickListener

I'm quite confused since I need to use two OnClickListeners for two different needs. I have a Recyclerview which once any item of his, once pressed, needs to change and I've implemented that successfully using OnBindViewHolder.itemView.setOnClickListener

现在,我希望单击相同的按钮来更新BottomAppBar,为此,我向ItemHolder类添加了一个接口.问题是,现在我单击一次,由于界面(我想),什么也没发生.

Now, I want that very same click to update my BottomAppBar and for that, I added an interface to my ItemHolder class. The issue is that now I once I click, due to the interface (I guess) nothing happens.

我知道了解我的情况可能有点复杂,因此我添加了以下代码来帮助解决这一问题:

I know it might be a bit complicated to understand my situation so I add the following code to help with that:

public class MainActivity extends AppCompatActivity implements MultiViewTypeAdapter.IClickListener {

具有此功能:

 @Override
    public void onItemClick(View view, int position) {
        int type = adapter.getItemViewType(position);
        if (type == 0) {
            bar.setFabAlignmentMode(BottomAppBar.FAB_ALIGNMENT_MODE_END);
            bar.replaceMenu(R.menu.bab_menu_chosen_project);
            fab.setImageDrawable(getDrawable(R.drawable.ic_message_white_24dp));
        }
        else{
            bar.setFabAlignmentMode(BottomAppBar.FAB_ALIGNMENT_MODE_CENTER);
            bar.replaceMenu(R.menu.bab_menu_primary);
            fab.setImageDrawable(getDrawable(R.drawable.ic_reply_black_24dp));
        }

    }

适配器的接口如下:

public interface IClickListener {
        void onItemClick(View view, int position);
    }

我目前正在做什么 public static class SelectedProjectItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 是这个吗?

what I'm currently doing on public static class SelectedProjectItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener { is this:

@Override
        public void onClick(View v) {
            listener.onItemClick(v, getAdapterPosition());
        }

但是,我要运行的是我正在做的事情

however, what I want to run is what I'm doing on

public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int listPosition) {

是:

((SelectedProjectItemHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dataSet.remove(listPosition);
                        dataSet.add(listPosition, unselectedCards.get(listPosition));
                        notifyItemChanged(listPosition);
                    }
                });

我希望单击一下就会发生两件事-Recyclerview上的项目将使用我描述的最后一段代码来更改,而MainActivity中的菜单将使用我描述的第一段代码来更改.

I wish two things will happen from one click - the item on Recyclerview will change using the last piece of code I described, and the menu in my MainActivity will change using the first piece of code I described.

谢谢帮助!

推荐答案

从RecyclerView.ViewHolder中删除以下代码

Remove below code from RecyclerView.ViewHolder

@Override
public void onClick(View v) {
    listener.onItemClick(v, getAdapterPosition());
}

并在"itemView"中添加列表器事件,如下所示:

And add listner event in "itemView" click as below:

((SelectedProjectItemHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(listener != null){
                            listener.onItemClick(v, getAdapterPosition());
                        }
                        dataSet.remove(listPosition);
                        dataSet.add(listPosition, unselectedCards.get(listPosition));
                        notifyItemChanged(listPosition);
                    }
                });

这篇关于如何在RecyclerView项单击上实现两个OnClickListeners?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆