为了账号安全,请及时绑定邮箱和手机立即绑定

添加/删除页面时,Android FragmentStatePagerAdapter

添加/删除页面时,Android FragmentStatePagerAdapter

慕勒3428872 2021-05-05 17:34:23
我正在尝试创建一个带有选项卡的浏览器,您可以轻松地在这些选项卡之间添加,删除和滑动。目前,我有一个ViewPager,每个分页的片段都包含一个WebView和一些按钮。问题是添加或删除标签后,我似乎无法可靠地更新ViewPager。我相信这部分是由FragmentStatePagerAdapter中的错误引起的,但是解决方法似乎不适用于我的用例,或者我无法实现它们(我是Android + Java noob)。理想情况下,添加和删除选项卡不会导致不必要地重新加载任何页面/选项卡中的WebView。至少它们需要恢复到以前的状态。当前,存在两个特定问题:在特定位置添加选项卡会在最后一页上显示空白片段。如果我在末尾添加了新标签,效果还可以。删除标签会正确更新标签,但是如果之后添加新标签,我会在最后一页看到完全空白的片段。这是我的适配器代码:import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentStatePagerAdapter;import android.support.v4.app.FragmentTransaction;import android.view.ViewGroup;import java.util.ArrayList;public class BrowserTabRepository extends FragmentStatePagerAdapter {public Browser browser;public ArrayList<BrowserTabFragment> mFragmentList = new ArrayList<BrowserTabFragment>();public boolean removing;public BrowserTabRepository(FragmentManager fm, Browser browser) {    super(fm);    this.browser = browser;}public BrowserTabRepository(FragmentManager fm) {    super(fm);}@Overridepublic BrowserTabFragment getItem(int position) {    return mFragmentList.get(position);}public boolean hasItem(int position) {    return position < mFragmentList.size();}public void clearAllItems() {    mFragmentList.clear();    this.notifyDataSetChanged();}public void updateItem(int position, BrowserTabFragment fragment) {    mFragmentList.set(position, fragment);    notifyDataSetChanged();}@Overridepublic int getItemPosition(Object object) {    // if(removing)return POSITION_NONE; workaround/hack I found. Tabs don't get messed up but the adapter incorrectly returns the state of the fragment that has just been deleted instead of the one replacing it    if (mFragmentList.contains(object)) {        final int index = mFragmentList.indexOf(object);        return index;    }    return POSITION_NONE;}
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

我最终放弃了这种方法,因为它是FragmentStatePagerAdapter的一个长期存在的错误,我无法针对高度动态化的制表符的要求修复100%的错误。

我发现一个更好的解决方案是切换到使用RecyclerView + PagerSnapHelper + RecyclerView.Adapter,因为它的工作方式几乎与减去错误的方式相同


查看完整回答
反对 回复 2021-05-19
  • 1 回答
  • 0 关注
  • 420 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信