【问题标题】:FragmentPagerAdapter Uses Wrong PageFragmentPagerAdapter 使用了错误的页面
【发布时间】:2014-12-05 02:18:12
【问题描述】:

我尝试在 Android 中使用 ActionBarTabs,例如 Twitter 的可滑动标签。我有三个选项卡和三个异步任务,每个选项卡都有网格视图。但我的观点随机使用标签。例如,当页面打开时 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
}

【问题讨论】:

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


    【解决方案1】:

    这不是您应该实现 PagerAdapter.getItem 函数的方式。 Android 将为每个可能的索引调用此函数以获取应在该选项卡上显示的片段。由于您的 getCount 返回 3,因此您的 getItem 函数应该有一个 switch 语句,其中包含 0、1 和 2 的 case 语句,并且您应该在每个 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;
    }
    

    我对所选选项卡和文本的工作方式有点困惑,但您确实只需要三个片段,每个选项卡上都有一个。

    【讨论】:

    • 这项技术是我第一次尝试,但没有奏效。当你说我再试一次但它不起作用时
    猜你喜欢
    • 1970-01-01
    • 2017-08-05
    • 2012-08-08
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多