gpt4 book ai didi

android - 从同一 fragment 中重新启动 fragment

转载 作者:行者123 更新时间:2023-12-05 07:37:44 26 4
gpt4 key购买 nike

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

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

我知道围绕这个主题有很多答案,但我想这是信息过多的情况,因此在尝试了许多不同的事情后我无法做到。

MainActivity 文件包含用于制作 fragment 的 FragmentPagerAdapter

public class SectionsPagerAdapter extends FragmentPagerAdapter {

private SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {

switch (position){
case 0:
return new CategoryTab();

case 1:
return new PostTab();

case 2:
return new VideoTab();
default:
return null;
}

}

@Override
public int getCount() {
return 3;
}

@Override
public CharSequence getPageTitle ( int position){
switch (position) {
case 0:
return "Tab1 Working";
case 1:
return "Tab2 Working";
case 2:
return "Tab3 Working";
}
return null;
}
}

刷新布局存在于 PostTab fragment 中

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 方法来完全重启 fragment 。

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder

如果我将代码更改为下面的代码,则 fragment 变为空白(之前加载的数据也会消失)。

fragmentTransaction.remove(this);
fragmentTransaction.attact(this);

如何使用删除和添加?由于我之前没有设置标签,因此我的应用程序会因我在此处设置的任何标签而崩溃。

fragmentTransaction.remove(this);
fragmentTransaction.add(this,"Tag");

“替换”有帮助吗?据我了解,它将替换所有 fragment 。我只需要重新加载 3 个 fragment 中的 1 个。

我试着关注 this回答,但我不知道 fragment 标签,因为我还没有设置它。

最佳答案

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

关于android - 从同一 fragment 中重新启动 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48366679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com