【问题标题】:TabLayout: How to start with the second tab?TabLayout:如何从第二个选项卡开始?
【发布时间】:2020-03-07 08:32:03
【问题描述】:

我的应用中有一个 TabLayout,我希望应用在打开时从第二个选项卡开始。

这是我的 TabFragment.java:

public class TabFragment extends Fragment {
    public static TabLayout tabLayout;
    public static ViewPager viewPager;


    public static int int_items = 9;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {



        View v =  inflater.inflate(R.layout.tab_layout,null);
        tabLayout = (TabLayout) v.findViewById(R.id.tabs);
        tabLayout.getTabAt(1).select();
        viewPager = (ViewPager) v.findViewById(R.id.viewpager);
        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));


        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                    tabLayout.setupWithViewPager(viewPager);
                   }
        });
        return v;
    }


    class MyAdapter extends FragmentPagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }


        // Tab positions
        @Override
        public Fragment getItem(int position) {
            if(position == 0){
                return new TabFavorite();
            }
            if(position == 1){
                return new Tab1();
            }
            if(position == 2){
                return new Tab2();
            }
            if(position == 3){
                return new Tab3();
            }
            if(position == 4){
                return new Tab8();
            }
            if(position == 5){
                return new Tab4();
            }
            if(position == 6){
                return new Tab5();
            }
            if(position == 7){
                return new Tab6();
            }
            if(position == 8){
                return new Tab7();
            }
        return null;
        }


        // Tab titles
        @Override
        public CharSequence getPageTitle(int position) {
            switch (position){
                case 0 :
                    return getText(R.string.tabfavorite);
                case 1 :
                    return getText(R.string.tab1);
                case 2 :
                    return getText(R.string.tab2);
                case 3 :
                    return getText(R.string.tab3);
                case 4 :
                    return getText(R.string.tab8);
                case 5 :
                    return getText(R.string.tab4);
                case 6 :
                    return getText(R.string.tab5);
                case 7 :
                    return getText(R.string.tab6);
                case 8 :
                    return getText(R.string.tab7);

            }
                return null;
        }

        @Override
        public int getCount() {
            return int_items;
        }
    }
}

我在网上找到了下面的代码,应该可以的:

tabLayout.getTabAt(1).select();

但这给了我以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.material.tabs.TabLayout$Tab.select()' on a null object reference
        at com.my.app.TabFragment.onCreateView(TabFragment.java:46)

我该怎么做才能从第二个标签开始? 我在互联网上找不到任何其他解决方案。 非常感谢

【问题讨论】:

    标签: java android nullpointerexception tabs android-tablayout


    【解决方案1】:

    您似乎正试图在标签存在之前访问它。在选择标签之前尝试调用tabLayout.setupWithViewPager(viewPager);

    【讨论】:

    • 朋友没问题
    【解决方案2】:

    如果您使用的是 viewpager

    viewPager.setCurrentItem(x); 其中,x = 您要默认打开的选项卡号。

    因为它从索引 0 开始计算,所以在你的情况下 x=1,所以它会是

    viewPager.setCurrentItem(x);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多