【问题标题】:How to implement click listener using FirebaseRecyclerAdapter如何使用 FirebaseRecyclerAdapter 实现点击监听器
【发布时间】:2018-03-16 16:46:40
【问题描述】:

我有一个物品持有者类和 FirebaseRecyclerAdapter。 如何从填充 recyclerview 的项目上的活动中管理点击侦听器。

我的持有人

public class ItemHolder extends RecyclerView.ViewHolder{
    public ImageView item1,item2;

    public ItemHolder(View itemView) {
        super(itemView);
        item1= itemView.findViewById(R.id.tv_item1);
        item2= itemView.findViewById(R.id.tv_item2);
    }

    public void bindView(Item item) {
        //TO DO
    }
}

在我的活动中

adapter = new FirebaseRecyclerAdapter<Item, ItemHolder>(options) {
            @Override
            protected void onBindViewHolder(final ItemHolder holder, final int position, @NonNull final Item item) {
                holder.bindView(item);
                //How to handle
                //holder.item1 click listener not in onBindViewHolder
                //holder.item2 how to handle click listener not in OnBindViewHolder
            }

            @Override
            public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                return new ItemHolder(getLayoutInflater().from(parent.getContext()).inflate(R.layout.item, parent, false));
            }

            @Override
            public void onDataChanged() {
                //TO DO
            }
        };

我阅读了一些建议使用界面的教程。你能告诉我怎么做吗?带有一些示例代码或说明。

谢谢。

【问题讨论】:

    标签: android android-recyclerview onclick firebaseui


    【解决方案1】:

    1 你可以做到,直接在onBindViewHolder中,反正:

    holder.item1.setImageDrawable(item.getItem1());
    holder.item2.setImageDrawable(item.getItem2());
    

    2 点击一个项目,你需要ClickListener.javaRecyclerTouchListener.java,你可以检查这个blog。在您的活动中:

    recyclerView.addOnItemTouchListener(new RecyclerTouchListener(this, recyclerView, new ClickListener() {
    
        @Override
         public void onClick(View view, int position) {
            //For CLICK
        }
    
        @Override
        public void onLongClick(View view, int position) {
        //For Long CLICK
        }
    
    }));
    

    【讨论】:

    • 感谢您的回答。我是在 onBindViewHolder 中完成的,但正如这篇文章 stackoverflow.com/questions/49274265/… 中所建议的那样,我永远不应该把它放在 onBindViewHolder 中。所以我需要把它从onBindViewHolder 移走。
    • 公共类 ItemHolder 扩展 RecyclerView.ViewHolder 实现 View.OnClickListener
    • 如果我在ItemHolder@KMI 中进行点击事件,如何从活动中获取点击的项目和一些额外的数据?
    【解决方案2】:

    在您的 bindView 方法中,它就像执行所有标准 View 操作一样简单...所以您可以这样做:

    item1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int position = getAdapterPosition();
            // TODO you
        }
    }
    

    【讨论】:

    • 非常感谢您的回答,但我需要从 bindView 内的活动中获取 item clicked 和一些额外数据。你的建议怎么可能? @supercilex 。
    • 对于该项目,您已经拥有它,因为您将它传递给 bindView 方法。至于从活动中获取数据,您也可以将其传递给bindView 方法。或者作为一个更简单的解决方案,您可以这样做:(MyActivity) itemView.getContext()
    猜你喜欢
    • 2012-02-09
    • 2011-08-21
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2012-02-18
    • 2019-04-01
    相关资源
    最近更新 更多