当前位置: 首页 > 知识库问答 >
问题:

Android FragmentStatePagerAdapter

拓拔奇
2023-03-14

我正在使用这个示例使用FragmentStatePagerAdapter。

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);
        }
    }
    /**
     * 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;
    }

但是我不清楚如何修改getitem(如果需要的话)来获取片段对象,当它已经存在并且用户页面从(例如)第2页到第1页时。我希望我的活动检索现有的、以前创建的片段,以便它可以运行一个内部类AsyncMethod,它驻留在fragment类中。

共有1个答案

佘辰龙
2023-03-14

我已经实现了与您所拥有的类似的东西。我扩展了FragmentPagerAdapter类,如下所示:

public class ContactsFragmentPagerAdapter extends FragmentPagerAdapter {
    ActionBar mActionBar;
    private List<Fragment> mFragments;

    public ContactsFragmentPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        mFragments = fragments;
    }

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

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

    public void setActionBar(ActionBar bar) {
        mActionBar = bar;
    }
}

注意,我向构造函数中添加了一个参数,以传递fragment对象的list。这样,该类的getItem()方法就可以返回扩展fragment的任何类或它的任何子类,而不是像您所做的那样只返回一个特定的类ArrayListFragment

活动中,我实例化了FragmentPagerAdapter的子类,在Fragment对象列表中传递:

实例化FragmentPagerAdapter

public final class ContactManager extends Activity {
    private ContactsFragmentPagerAdapter mAdapter;
    private ViewPager mPager;
    public ActionBar mActionBar;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.contact_manager);

        List<Fragment> fragments = new Vector<Fragment>();
        fragments.add(Fragment.instantiate(this, ContactsListFragment.class.getName()));
        fragments.add(Fragment.instantiate(this, GroupsListFragment.class.getName()));
        mAdapter = new ContactsFragmentPagerAdapter(this.getFragmentManager(), fragments);

        mPager = (ViewPager) findViewById(R.id.pager);
        mPager.setAdapter(mAdapter);

        mPager.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageScrollStateChanged(int arg0) {}

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {}

            @Override
            public void onPageSelected(int arg0) {
                mActionBar.getTabAt(arg0).select();
            }
        });

    }

}

通过访问变量“fragments”,您可以访问以前创建的片段以便运行该片段的方法。

 类似资料:

相关问答

相关文章

相关阅读