gpt4 book ai didi

android - Viewpager 和 FragmentPagerAdapter : Page view removal

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:31 24 4
gpt4 key购买 nike

我正在使用带有 FragmentPagerAdapterViewpager 来允许添加和删除页面。每个页面显示从互联网上获得的数据。

添加新页面时,新 fragment 与该页面相关联。数据通过 AsyncTask 获取并显示在 Fragment 中。当用户选择删除页面时,其想法是销毁该页面和关联的 Fragment。

总的来说,这一切都很好。我看到的问题如下:

  1. 您有三个包含数据的页面:

    [第1页][第2页][第3页]

  2. 你删除除最后一页以外的任何页面,比如第 2 页;第 2 页根据需要消失:

    [第 1 页] [第 3 页]

  3. 您添加一个新页面;但新页面不是空白的新页面,而是显示第 3 页的数据( View )。

    [Page 1] [Page 3] [Page 4, but showing view/data of Page 3, should be blank]


我的activity中的页面移除代码如下:

   // Destroy fragment for this page
DataListFragment curFrag = getFragmentByName(currentPage);
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().remove(curFrag).commit();
fm.executePendingTransactions();
curFrag = null;

// Remove page and update adapter
mPageTitles.remove(position);
mAdapter.notifyDataSetChanged();

使用调试器,它显示 fragment 在 executePendingTransactions() 调用后从 FragmentManager 中删除。但在 FrampePagerAdapters 调用 mAdapter.notifyDataSetChanged() 中, fragment 被添加回去,然后在创建新页面时显示。

我尝试使用 FrameStatePagerAdapter,因为它应该允许销毁 fragment ,但它不起作用。在我的 FragmentPagerAdapter 的 getItemPosition() 方法中,我使用 return FragmentAdapter.POSITION_NONE; 正如我遇到的另一篇 SO 文章中指出的那样。

似乎那个页面的 View 没有被销毁,而是被添加回新页面。我尝试在新页面的 View 上使用 removeViewAt() 方法,但这没有用。


作为新手,我确信我遗漏了一些明显的东西......

最佳答案

您应该扩展 FragmentStatePagerAdapter 并从该适配器的项目列表中删除相应的项目,而不是尝试从 Activity 中删除 fragment 。删除适配器中的项目后,不要忘记调用 adapter.notifyDataSetChanged()。完成后,ViewPagerFragmentStatePagerAdapter 将负责其余的工作。

关于android - Viewpager 和 FragmentPagerAdapter : Page view removal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12315797/

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