如何在片段内刷新回收器视图而无需更改选项卡

时间:2017-01-20 17:31:30

标签: android android-fragments android-recyclerview

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

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,但不更新recycleler视图。我尝试清除AdsList arraylist并再次调用该方法来获取数据loadnormalRv(),在这种情况下页面变为空白,如果我更改选项卡然后返回到此选项卡,然后回收器视图显示数据,或者如果我按这个页面上有一些像fitler或sort这样的按钮然后数据显示。

这是完整的片段代码link。 请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

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

mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);

要刷新您的回收商视图,您有两种选择:

  • notifyDataSetChanged()将“重绘”整个回收站视图(它将重新启动所有项目的所有动画)
  • 您可以致电yourAdapter.notifyItemRangeInserted(int positionStart, int itemCount)
  • 您也可以致电notifyItemChanged(int position)来刷新特定位置的项目。这样你就可以进行有效的刷新。