Android 从同一片段中重新启动片段

Android 从同一片段中重新启动片段,android,android-fragments,Android,Android Fragments,我有一个选项卡布局,其中一个ViewPager有3个片段。这些片段中的数据由recyclerview填充。在这个片段中,我还实现了滑动刷新布局 当我拉刷新“PostTab”时,我想重新启动/重新加载片段,以便从服务器获取新的数据集。我不能这样做 我知道围绕这个话题有很多答案,但我想这是因为我有太多的信息,所以在尝试了很多不同的事情后,我无法做到这一点 MainActivity文件包含用于生成片段的FragmentPagerAdapter 刷新布局出现在PostTab片段中 PostTab.jav

我有一个选项卡布局,其中一个ViewPager有3个片段。这些片段中的数据由recyclerview填充。在这个片段中,我还实现了滑动刷新布局

当我拉刷新“PostTab”时,我想重新启动/重新加载片段,以便从服务器获取新的数据集。我不能这样做

我知道围绕这个话题有很多答案,但我想这是因为我有太多的信息,所以在尝试了很多不同的事情后,我无法做到这一点

MainActivity文件包含用于生成片段的FragmentPagerAdapter

刷新布局出现在PostTab片段中

PostTab.java

public class PostTab extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater,  ViewGroup container,  Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.post_tab, container, false);


    // Get data from server

    //set recycler adapter 

    //Scroll listener to load more data

    //Load more data on scroll

    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            refreshItems();
        }
    });
    return view;
}

public void refreshItems(){
    final android.support.v4.app.FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
            fragmentTransaction.detach(this);
            fragmentTransaction.attach(this);
            fragmentTransaction.commit();
    }

}

}
上面的代码正确加载了新数据,但是我的应用程序崩溃了。我猜这段代码不会通过再次调用onCreateView方法完全重新启动片段

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder
如果我将代码改为下面的代码,那么片段将变为空白(先前加载的数据也将消失)

如何使用删除和添加?因为我之前并没有设置标签,所以我的应用程序会和我在这里设置的标签一起崩溃

fragmentTransaction.remove(this);
fragmentTransaction.add(this,"Tag");
“替换”是否有帮助?据我所知,它将替换所有碎片。我只需要重新加载3个碎片中的1个


我试图按照答案进行操作,但我不知道片段标记,因为我还没有设置它。

我认为您应该只需要在refreshItems()方法中使用notify方法更新适配器,如
public void refreshItems(){youradapter.notifydatasetchanged();}
。这可能是因为您调用了另一个片段并设置了适配器,或者可能是因为您正在更改已更改的位置。

不重新加载片段,为什么不使当前适配器数据无效并加载它呢again@VivekMishra嘿我复制了异步任务,以便在refresh items方法中从服务器获取初始数据,并重置滚动侦听器,以重置其中受分页加载异步任务影响的不同参数。到目前为止,它似乎还在发挥作用。测试类中存在的各种函数以检查是否有任何错误。谢谢你的评论,这让我重新思考了这个方法。仍然想知道我在上面的方法中做错了什么。创建一个将设置适配器的方法。在该方法中,通过向方法传递新数据集来显示更新的记录,传递数据数组或列表,以及listview或recyclerview等视图,并调用该方法。请记住,如果以前的数据存在,请将其作废
fragmentTransaction.remove(this);
fragmentTransaction.attact(this);
fragmentTransaction.remove(this);
fragmentTransaction.add(this,"Tag");