TabLayout:如何从第二个选项卡开始?
TabLayout: How to start with the second tab?
我的应用程序中有一个 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;
}
}
}
我在 Internet 上找到了以下代码,它应该可以完成工作:
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);
。
我的应用程序中有一个 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;
}
}
}
我在 Internet 上找到了以下代码,它应该可以完成工作:
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);
。