Android 如何在不必更改选项卡的情况下刷新片段内的回收器视图

Android 如何在不必更改选项卡的情况下刷新片段内的回收器视图,android,android-fragments,android-recyclerview,Android,Android Fragments,Android Recyclerview,我有一个tablayout和viewpgaer,其中有10个片段,每个片段向api发送请求,结果显示在每个片段的回收器视图中。用户可以发表文章并添加到我们的服务器,在成功添加文章后,他将返回到他发布的相应类别。现在,我们需要刷新片段以更新recycler视图以显示新条目。用户成功发布后,将向片段发送广播,因此执行以下代码: BroadcastReceiver broadRefresh = new BroadcastReceiver() { @Override public voi

我有一个tablayout和viewpgaer,其中有10个片段,每个片段向api发送请求,结果显示在每个片段的回收器视图中。用户可以发表文章并添加到我们的服务器,在成功添加文章后,他将返回到他发布的相应类别。现在,我们需要刷新片段以更新recycler视图以显示新条目。用户成功发布后,将向片段发送广播,因此执行以下代码:

BroadcastReceiver broadRefresh = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("recd broadcast mainact" + intent.getStringExtra("refresh"));
        if (intent.getStringExtra("refresh") != null) {

            getFragmentManager()
                    .beginTransaction()
                    .detach(CarsFragment.this)
                    .attach(CarsFragment.this)
                    .commit();
        }
    }
};
再次调用片段oncreateview和onviewcreated,但不会更新回收器视图。我尝试清除AdsList arraylist并再次调用该方法来获取数据loadnormalRv(),在这种情况下,页面将变为空白,如果我更改了选项卡,然后返回此选项卡,然后返回到具有数据显示的recycler视图,或者如果我按下此页面上的某些按钮(如fitler或sort),则会显示数据

下面是完整的片段代码。
请帮忙。谢谢。

如果您想要从最后一个到第一个的物品,您可以添加:

mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
要刷新回收器视图,您有两个选项:

  • notifyDataSetChanged()
    这将“重画”整个回收器视图(它将重新启动所有项目的所有动画)
  • 您可以调用适配器。notifyItemRangeInserted(int positionStart,int itemCount)
  • 您还可以调用
    notifyItemChanged(int-position)
    仅刷新特定位置的项。这样,您将进行有效的刷新

如果您希望从最后一个项目开始到第一个项目,您可以添加:

mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
要刷新回收器视图,您有两个选项:

  • notifyDataSetChanged()
    这将“重画”整个回收器视图(它将重新启动所有项目的所有动画)
  • 您可以调用适配器。notifyItemRangeInserted(int positionStart,int itemCount)
  • 您还可以调用
    notifyItemChanged(int-position)
    仅刷新特定位置的项。这样,您将进行有效的刷新

如果只需要刷新recyclerView,则可以调用
notifyDataSetChanged()
(将新数据集传递给适配器后)。我不明白为什么需要拆下并连接相同的fragment@AhmedAbidiarraylist已经有项,当我重新提取数据时,.add方法会在末尾添加项,而我需要按时间顺序、最新顺序等显示项,api会按正确的顺序发送项,但是在arraylist中,该项是在最后添加的,因此我尝试如果再次创建片段,则arraylist将重新初始化并正确更新,尝试清除arraylist也必须从适配器中替换整个数组并使用notifyDataSetChanged()之后,如@AhmedAbidi所说,如果只需刷新recyclerView,则可以调用
notifyDataSetChanged()
(将新数据集传递给适配器后)。我不明白为什么需要拆下并连接相同的fragment@AhmedAbidiarraylist已经有项,当我重新提取数据时,.add方法会在末尾添加项,而我需要按时间顺序、最新顺序等显示项,api会按正确的顺序发送项,但在arraylist中,该项在最后添加,因此我尝试如果再次创建片段,则arraylist将重新初始化,并且将正确更新,尝试清除arraylist,同时还必须从适配器中替换整个数组,并在这之后使用notifyDataSetChanged(),如@AhmedAbidi所说