【问题标题】:Passing data from a RecyclerView to Fragment将数据从 RecyclerView 传递到 Fragment
【发布时间】:2021-05-11 00:16:41
【问题描述】:

我目前正在创建一个应用程序,它由一个 Fragment、一个 RecyclerView 的 Adapter 和一个通过 Fragment 访问的 RecyclerView 组成。我需要将数据从 RecyclerView 传递回片段,但是我无法这样做,因为片段没有通过 Intent 识别。当用户从 RecyclerView 中选择一个项目时,这个项目应该被传递给片段。我有 RecyclerView 使用onBackPressed() 导航回工作正常的片段。但是,似乎没有数据通过。请在下面查看我目前在onItemClick 中拥有的内容:

@Override
public void onItemClick(View view, int position) {
    // Need to pass data through to Fragment, however unable to do so as it's not identified
    // within the Intent
    onBackPressed();
}

【问题讨论】:

  • 你传递的是什么数据,是int还是什么¿

标签: java android-studio android-fragments android-recyclerview android-adapter


【解决方案1】:

如果您想将数据传递给您的 Fragment,那么我认为您应该在您的 RecyclerViewAdapter 中创建一个 OnItemClickListener 接口并让您的 Fragment 实现它。 Fragment 应该将自己注册到 RecyclerViewAdapter 中的 onItemClickListeners。然后您应该能够将您的 Fragment 传递给单击的项目。

这进入你的 RecyclerViewAdapter 的类:

 class RecyclerViewAdapter{
 //...
        interface OnItemClickListener {
            void onItemClick(Item item); //replace the item with whatever you want to pass to the fragment
        }

        List<OnItemClickListener> onItemClickListeners  = new ArrayList<>();

        public void addOnItemClickListener(OnItemClickListener listener){
            onItemClickListeners.add(listener);
        }
        @Override
        public void onItemClick(View view, int position) {

            for(OnItemClickListener listener : onItemClickListeners) {
                listener.onClick(item);
            }
            onBackPressed();
        }
     //...
    }

这在你的 Fragment 的类中:

class Fragment implements RecyclerViewAdapter.OnItemClickListener {

    //...
    //Somewhere in your fragment where you create your RecyclerViewAdapter
    recyclerViewAdapter.addOnItemClickListener(this);
    //...
    @Override
    public void onItemClick(Item item) {
        //now data is passed to your Fragment
    }
}

希望这有助于解决您遇到的问题。

【讨论】:

    猜你喜欢
    • 2021-05-12
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多