FragmentPagerAdapter使用错误的页面

时间:2014-12-05 02:18:13

标签: android android-fragments android-asynctask tabs android-actionbar

我尝试使用ActionBarTabs,比如推特在Twitter中可刷卡的标签。我有三个选项卡和三个asynctasks,每个选项卡都有gridview。但我的观点随机使用标签。例如,当页面打开时,FragmentOne将在第二个视图中加载。当我进入secondview FragmentTwo加载第三个视图。当我第三次看到第二个时。当我回到第二个时,我会看到第一个观看内容。你认为我的错误在哪里?

    pageType = getIntent().getIntExtra("type", 0);
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
    mViewPager.setAdapter(mAdapter);
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    mViewPager
            .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    bar.setSelectedNavigationItem(position);
                }
            });
    // Adding Tabs
    if (pageType != 3) {
        for (String tab_name : tabs) {
            bar.addTab(bar.newTab().setText(tab_name).setTabListener(this));
        }
    } else {
        for (String tab_name : tabs_multi) {
            bar.addTab(bar.newTab().setText(tab_name).setTabListener(this));
        }
    }


public class TabsPagerAdapter extends FragmentPagerAdapter {

    public TabsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {

        String text = getActionBar().getSelectedTab().getText().toString();
        if (text.equals("Futbol")) {
            return new FragmentOne(pageType);
        } else if (text.equals("Basketbol")) {
            return new FragmentTwo(pageType);
        } else if (text.equals("Voleybol")) {
            return new FragmentThree(pageType);
        } else if (text.equals("Video")) {
            return new FragmentOne(pageType);
        } else if (text.equals("Albüm")) {
            return new FragmentTwo(pageType);
        } else if (text.equals("Sesler")) {
            return new FragmentThree(pageType);
        } 

        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 3;
    }

}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
}

1 个答案:

答案 0 :(得分:0)

这不是你应该如何实现PagerAdapter.getItem函数。 Android将为每个可能的索引调用此函数以获取应该在该选项卡上显示的片段。由于你的getCount返回3,你的getItem函数应该有一个switch语句,case语句为0,1和2,你应该在每个case语句中构造你的3个片段之一。然后,PagerAdapter将跟踪这些片段实例并将其返回。

@Override
public Fragment getItem(int index) {
    switch (index) {
        case 0:
            return new FragmentOne();
        case 1:
            return new FragmentTwo();
        case 2:
            return new FragmentThree();
    }
    return null;
}

我对所选标签和文字的工作原理有点困惑,但你确实需要只有三个片段,每个标签上都有一个片段。