代码之家  ›  专栏  ›  技术社区  ›  Tara

如何从活动的片段中访问RecyclerView中的项目

  •  0
  • Tara  · 技术社区  · 7 年前

    我有一项活动 TabLayout (我的 Fragments 位于) myFragment有一个 RecyclerView 它本身
    我想在 textView 在我的活动中。

    这张图片解释了我的问题。

    enter image description here

    我该怎么做?谢谢你的帮助!。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Vlad Kramarenko    7 年前

    您可以使用事件总线: https://github.com/greenrobot/EventBus 。此库可帮助您将事件从一个活动/片段/视图发送到另一个活动/片段/视图。您必须只为item根元素添加onclicklistener,并执行如下操作: EventBus.getDefault().post(getItemName()); 。在您的活动中添加以下内容:

    @Subscribe(threadMode = ThreadMode.MAIN)  
    public void onMessageEvent(String name) {
       textView.setText(name);
    };
    

    不要忘记注册和注销侦听器。

        2
  •  0
  •   Farrokh Shahriari    7 年前

    您应该在recyclerView适配器中编写onItemCLickListener,然后从活动中调用它来设置textview文本。

    适配器代码:

     OnItemClickListener onItemClickListener;
     public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
            this.onItemClickListener = onItemClickListener;
        }
    
    
      public interface OnItemClickListener {
            void onClick(int position,String itemName);
        }
    
     @Override
     public void onBindItemViewHolder(final AdapterRecycelerView.ViewHolderRecyclerItem holder, final int position) {
    
            try {
    
                holder.linearItem.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (onItemClickListener != null)
                            onItemClickListener.onClick(position,arrayList.get(position).getName());
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    

    活动代码:

     adapterRecycelerView.setOnItemClickListener(new AdapterRecycelerView.OnItemClickListener() {
                    @Override
                    public void onClick(int position,String itemName) {
                       textview.setText(itemName);
                    }
                });