gpt4 book ai didi

android-fragments - 如何处理 FragmentPagerAdapter 重用 Fragments?

转载 作者:行者123 更新时间:2023-12-04 08:36:52 25 4
gpt4 key购买 nike

所以,我正在尝试使用 Android 的支持 v4 库中的 ViewPager,但是它(或 FragmentPagerAdapter)如何处理 Fragments 存在一些严重的问题。例如,我将 FragmentPagerAdapter 子类化以执行以下操作:

public class MyPagerAdapter extends FragmentPagerAdapter
{
private ArrayList<Fragment> fragments = null;
private ArrayList<Data> data = null;

public MyPagerAdapter(FragmentManager fragmentManager, ArrayList<Data> data)
{
super(fragmentManager);

this.data = data;

fragments = new ArrayList<Fragment>();

for(Data datum : data)
{
MyDataFragment fragment = new MyDataFragment();
fragment.setData(datum);
fragments.add(fragment);
}
}

@Override
public Fragment getItem(int i)
{
return fragments.get(i);
}

@Override
public int getCount()
{
return fragments.size();
}
}

现在,我认为这已经足够了,我可以继续实现 MyDataFragment使用 onCreateView Fragments 通常实现的方法。但是我遇到了一个有趣的问题。当我离开 Activity 并返回它时,ViewPager 将显示为空白。不知何故,它通过调用 findFragmentByTag 来重用 Fragments,然后根本不调用 getItem等。更糟糕的是,Fragment 将没有 onCreateView事件。所以我想我可以通过移动我的 onCreateView 来利用 ViewPager 的片段缓存。代码,主要获取对片段膨胀的各种 View 的引用到 onAttach .唯一的问题是,在 onAttach 期间, MyDataFragment 的 getView方法总是返回 null。在线片段的所有示例都描述了 onCreateView应该有你所有的 View 设置代码。好的。但是,当我创建一个像 MyDataFragment.setSomeField(String value) 这样的方法时,我需要使用对 TextView 的引用.自 onCreateView并不总是被调用(例如,当 FragmentPagerAdapter 神奇地回收 Fragments 时),最好在 onAttach 中获取该引用。 .但是,在 onAttach期间,Fragment 的根 View 仍然为空(可能是因为 onCreateView 一开始没有被调用)!之后没有其他事件发生(除了 onActivityCreated ,它与 Fragment 本身无关),所以没有地方做设置代码。这应该如何工作?我在这里遗漏了什么重要的东西,还是片段系统是由猴子设计的?

最佳答案

我不确定这是否是 FragmentPagerAdapter 的正确用例(这听起来更像是您想要用 ListAdapter 做的事情)。

来自 FragmentPagerAdapter文档:

Implementation of PagerAdapter that represents each page as a Fragment that is persistently kept in the fragment manager as long as the user can return to the page.

This version of the pager is best for use when there are a handful of typically more static fragments to be paged through, such as a set of tabs. The fragment of each page the user visits will be kept in memory, though its view hierarchy may be destroyed when not visible. This can result in using a significant amount of memory since fragment instances can hold on to an arbitrary amount of state. For larger sets of pages, consider FragmentStatePagerAdapter.



我会考虑切换到 FragmentStatePagerAdapter 或者 ListAdapter .
如果您希望调用 createView,则每次都必须重新创建它(销毁旧片段并创建新片段),但我再次认为这不是您想要的。

关于android-fragments - 如何处理 FragmentPagerAdapter 重用 Fragments?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18217613/

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