android - FragmentPagerAdapter getItem 位置错误

标签 android fragmentpageradapter

我遇到了 FramentPageAdapter 的奇怪问题

主 Activity .java

@SuppressLint("ValidFragment")
public class MainActivity<DashboardActivity> extends FragmentActivity implements     ActionBar.TabListener {
...
...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }
    });

    actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(0)).setTabListener(this).setIcon(R.drawable.rating_good));
    actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(1)).setTabListener(this).setIcon(R.drawable.action_search));
    actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(2)).setTabListener(this).setIcon(R.drawable.action_search));
}
...
public class SectionsPagerAdapter extends FragmentPagerAdapter {
    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    public Fragment getItem(int position) {
        Fragment fragment = null; 
        switch(position) {
            case 0:
                fragment = new Fragment0();  
            break;
            case 1:
                fragment = new Fragment1();  
            break;
            case 2:
                fragment = new Fragment2();  
            break;
        }
        return fragment;
    }
    @Override
    public int getCount() {
        return 3;
    }
    /*
     * Title
     */
    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
        case 0:
            return getString(R.string.title_section0).toUpperCase(l);
        case 1:
            return getString(R.string.title_section1).toUpperCase(l);
        case 2:
            return getString(R.string.title_section2).toUpperCase(l);
        }
        return null;
    }
}

当我尝试在 3 个选项卡之间切换时,public Fragment getItem(int position) 返回错误的位置。当我创建仅包含 2 个选项卡的应用程序时,一切正常。添加超过 2 个,产生奇怪的问题。 从 0 切换到 1 位置 - 工作正常,从 1 切换到 0 - 工作正常,从 1 切换到 2 位置 - 工作正常,但是,当我尝试从 2 返回到 1 位置时,public Fragment getItem(int position) - int position 返回“0”而不是“1”。 有人帮我解决这个问题吗?

最佳答案

好的,我找到了解决方案。 首先,getItem“int position”,并不表示当前显示 fragment 。 要显示 3 个或更多选项卡,而不卸载第一个 fragment ,您必须添加此行:

mViewPager.setOffscreenPageLimit(3);

故事结束...

关于android - FragmentPagerAdapter getItem 位置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17391460/

相关文章:

android - 在 fragmentPagerAdapter 中禁用滑动? - 安卓

java - 在 Android 中使用图库图像更改图像按钮

java - 如何在 sqlite 中查询 fts 表的一列匹配而另一列不匹配特定查询?

java - 安卓 : get data from MySQL using 'where' condition

安卓下拉列表

java - FragmentPagerAdapter 在第一页显示所有 fragment 内容

android - 当 fragment 恢复/重新创建时,ViewPager getScrollX 返回 0

java - 通过快捷应用快捷方式打开 fragment

android - 在第一个 fragment 上调用第二个 fragment (选项卡)的 onCreateView

android - 将焦点从 ViewPager/TabLayout 中的选项卡移开