在Tablayout中选择选项卡时IndexOutOfBoundsException

时间:2016-04-06 09:56:50

标签: java android

如果我想在IndexOutOfBoundsException中选择标签,则会出现TabLayout错误: 这是initTablayout函数,它在onCreate方法中调用:

       //======================================== Init Tablayout and view pager
            private void initTabLayout() {
                mainActivityViewPager = (ViewPager) findViewById(R.id.view_pager_main_activity);


                mainActivityTabLayout = (TabLayout)findViewById(R.id.tab_layout_main_activity);
                TabLayout.Tab tab = mainActivityTabLayout.getTabAt(1);
                tab.select();

                FragmentManager manager = getSupportFragmentManager();
                MainActivityPagerAdapter adapter = new MainActivityPagerAdapter(manager);
                mainActivityViewPager.setAdapter(adapter);
                mainActivityTabLayout.setupWithViewPager(mainActivityViewPager);
                mainActivityViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mainActivityTabLayout));
                mainActivityTabLayout.setTabsFromPagerAdapter(adapter);
            }

我收到此错误,我在getTabAt(1)方法中选择了所选标签的索引,我在PagerAdapter类上有三个标签:

public class MainActivityPagerAdapter extends FragmentStatePagerAdapter {

        //============================================ Constructor

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

        //============================================ GetItem Method ()
        @Override
        public Fragment getItem(int position) {
            Fragment frag = null;
            switch (position) {
                case 0:
                    frag = new Fragment_one();
                    break;
                case 1:
                    frag = new Fragment_two();
                    break;
                case 2:
                    frag = new Fragment_three();
                    break;

            }
            return frag;
        }

        //============================================= GetCount Method ()
        @Override
        public int getCount() {
            return 3;
        }

        //============================================= GetPageTitle

        @Override
        public CharSequence getPageTitle(int position) {
            String title = "";
            switch (position) {
                case 0:
                    title = "اول ";
                    break;
                case 1:
                    title = "دوم ";
                    break;
                case 2:
                    title = "سوم ";
                    break;

            }

            return title;
        }
    }

完整错误是:

 java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

2 个答案:

答案 0 :(得分:1)

您似乎忘记将{添加到mainActivityTabLayout,因此您的TabLayout将有0项。因此,当您访问tab1时,您获得了IndexOutOfBoundsException

mainActivityTabLayout.addTab(tabLayout.newTab().setText("1"));
mainActivityTabLayout.addTab(tabLayout.newTab().setText("2"));
mainActivityTabLayout.addTab(tabLayout.newTab().setText("3"));

答案 1 :(得分:-1)

选择tab3

请执行以下操作:

mainActivityTabLayout.addTab(tabLayout.newTab().setText("3"),true);