Java TabLayout:如何从第二个选项卡开始?
我的应用程序中有一个TabLayout,我希望应用程序在打开时从第二个选项卡开始 这是我的TabFragment.java:Java TabLayout:如何从第二个选项卡开始?,java,android,nullpointerexception,tabs,android-tablayout,Java,Android,Nullpointerexception,Tabs,Android Tablayout,我的应用程序中有一个TabLayout,我希望应用程序在打开时从第二个选项卡开始 这是我的TabFragment.java: public class TabFragment extends Fragment { public static TabLayout tabLayout; public static ViewPager viewPager; public static int int_items = 9; @Nullable @Overr
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)
我该怎么做才能从第二个标签开始?
我在互联网上找不到任何其他解决方案。
如果您正在使用viewpager,非常感谢 viewPager.setCurrentItem(x); 其中,x=要作为默认打开的选项卡编号 因为它从索引0开始计数,所以在您的情况下x=1,所以它将是
viewPager.setCurrentItem(x) 看起来您正试图在某个选项卡存在之前访问它。尝试调用
tabLayout.setupWithViewPager(viewPager)在选择选项卡之前进行编码>。没问题amigo