Android FragmentStatePagerAdapter

标签 android android-fragments fragmentpageradapter

我正在使用 this example 处理 FragmentStatePagerAdapter .

MyAdapter 类实现如下:

public static class MyAdapter extends FragmentStatePagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

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

        @Override
        public Fragment getItem(int position) {
            return ArrayListFragment.newInstance(position);
        }
    }

ListFragment 类包括以下创建新实例的方法:

    /**
     * Create a new instance of CountingFragment, providing "num"
     * as an argument.
     */
    static ArrayListFragment newInstance(int num) {
        ArrayListFragment f = new ArrayListFragment();

        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt("num", num);
        f.setArguments(args);

        return f;
    }

当我在我的 Activity 中创建一个新的 fragment 状态寻呼机适配器时,会调用 getItem,然后调用 ListFragment 类中的 newInstance 方法。当我想创建一个新 fragment 时,这很棒。

但我不清楚如何修改 getItem(如果甚至需要)以获取 fragment 对象当它已经存在时和用户页面,例如,第 2 页到第 1 页。我希望我的 Activity 检索现有的、先前创建的 fragment ,以便它可以运行位于 fragment 类中的内部类 AsyncMethod

最佳答案

我认为解决方案比提供的答案要简单得多。

如果您查看 source of FragmentStatePagerAdapter.instantiateItem() ,您会注意到 instantiateItem() 为您处理此逻辑,因此您的 getItem() 实现应始终返回一个新实例。

因此,为了返回现有的 Fragment,只需执行以下操作(假设您从 ViewPager 调用):

Fragment f = (Fragment) getAdapter().instantiateItem(this, getCurrentItem());

关于Android FragmentStatePagerAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10656323/

相关文章:

android - Spanned CSS 样式/颜色

android - 如何在 Honeycomb 上创建此 gmail 应用程序效果

android - ListFragment 和 onActivityCreated 调用了两次

android - 如何动态创建 fragment 寻呼机适配器

android - 如何使 nestedscrollview 的 subview 之一变为粘性标题?

Android - 为两个 Intent 注册广播接收器?

android - 如何旋转 Android 模拟器显示?

java - 无法在同一 Activity 中用 fragment B 替换 fragment A

java - FragmentPagerAdapter - 设置异步计数和标题

android - 如何使用 FragmentPagerAdapter 在 fragment 之间滑动