【问题标题】:Tabs with view pager within a fragment - android片段中带有视图寻呼机的标签 - android
【发布时间】:2014-10-30 09:50:17
【问题描述】:

我的 Android 应用程序的屏幕左侧有一个静态菜单。每当我从左侧菜单中单击一个项目时,fragment 就会出现在它旁边。

我在左侧菜单中的一个项目是课程。在课程中fragment 包含一个viewpager 以观看阅读或收听课程。您可以通过侧滑或单击标题栏上的相应选项卡导航到这三个选项之一。这一切都很好。

但是,如果我单击左侧菜单栏上的另一个项目并导航回课程部分,则会出现混乱。再次调用onCreateView(),因此再次将选项卡添加到标题栏和viewpager。我尝试删除onPause() 方法中的所有选项卡并删除viewpager 中的所有视图。不再再次添加选项卡,但屏幕上的页面现在是空白的。

非常感谢任何帮助。

这是extends FragmentPagerAdapter的类

public class TabsPagerAdapter extends FragmentPagerAdapter {

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

    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
            // Top Rated fragment activity
            return new WatchCourseFrag();
        case 1:
            // Games fragment activity
            return new ReadCourseFrag();
        case 2:
            // Movies fragment activity
            return new ListenCourseFrag();
        }

        return null;
    }

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

}

这里是标签fragment 类:

public class TabFrag2 extends Fragment implements ActionBar.TabListener {

    private ViewPager viewPager;
    private TabsPagerAdapter mAdapter;
    private ActionBar actionBar;
    // Tab titles
    private String[] tabs = { "Watch", "Read", "Listen" };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.pager, container, false);

        // Initilization
        viewPager = (ViewPager) view.findViewById(R.id.pager);
        actionBar = ((HomeScreenTablet) getActivity()).getSupportActionBar();
        mAdapter = new TabsPagerAdapter(getFragmentManager());

        viewPager.setAdapter(mAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        // Adding Tabs
        // Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name)
                    .setTabListener(this));
        }

        /**
         * on swiping the viewpager make respective tab selected
         * */
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                // on changing the page
                // make respected tab selected
                actionBar.setSelectedNavigationItem(position);
            }

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

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
        viewPager.setOffscreenPageLimit(3);
        return view;
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // on tab selected
        // show respected fragment view
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    }

    public void onPause() {
        super.onPause();
        viewPager.removeAllViews();
        viewPager.removeAllViewsInLayout();
        actionBar.removeAllTabs();

    }
}

【问题讨论】:

    标签: android android-fragments tabs android-viewpager


    【解决方案1】:

    找到答案: 将“TabsPagerAdapter 扩展 FragmentPagerAdapter”更改为“TabsPagerAdapter 扩展 FragmentStatePagerAdapter”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多