我有一个动态标签布局,但每次我按下后退按钮并再次重新进入我的应用程序时,我的标签都会翻倍,为什么?
i have a dynamic tablayout but every time i push back button and re-enter my app again , my tab doubles , why?
在我的 TabLayout
中,我在 MainActivity
的 onCreate()
方法中动态创建我的登录名 TabItem
,但每次我使用 [=17 退出我的应用程序时=] 按钮,然后我重新进入我的应用程序,它会再次创建该登录名 TabItem
,因此每次都会加倍,我尝试检查并使用:
if(savedInstanceState == null) {
// create the first tab
}
但是没有用,你能帮帮我吗?
这是我的 MainActivity
代码:
public class MainActivity extends AppCompatActivity {
TabLayout tabLayout;
ViewPager viewPager;
public static List<Fragment> fragments = new ArrayList<>();
public static List<String> fragmentsTitle = new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tabLayout = findViewById(R.id.myTabLayout);
viewPager = findViewById(R.id.myViewPager);
MyViewPagerAdapter Adapter = new MyViewPagerAdapter(getSupportFragmentManager());
Adapter.createTab(new LoginFragment(), "Login", getSupportFragmentManager(), viewPager);
viewPager.setAdapter(Adapter);
tabLayout.setupWithViewPager(viewPager);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
public void onTabSelected(TabLayout.Tab tab) {
}
public void onTabUnselected(TabLayout.Tab tab) {
}
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
}
这是 FragmentPagerAdapter
的代码
public class MyViewPagerAdapter extends FragmentPagerAdapter {
public MyViewPagerAdapter(FragmentManager manager) { super(manager);}
public void createTab(Fragment fragment, String title, FragmentManager manager, ViewPager viewPager) {
MyViewPagerAdapter Adapter = new MyViewPagerAdapter(manager);
MainActivity.fragments.add(fragment);
MainActivity.fragmentsTitle.add(title);
Adapter.notifyDataSetChanged();
viewPager.setAdapter(Adapter);
}
public Fragment getItem(int position) {
return MainActivity.fragments.get(position);
}
public CharSequence getPageTitle(int position) {
return MainActivity.fragmentsTitle.get(position);
}
public int getCount() {
return MainActivity.fragments.size();
}
}
尝试从 MainActivity 的列表中删除静态关键字。而是使用 final 来防止重新初始化列表。
它每次都会创建该选项卡,因为静态的东西只要被杀死就会保持活力。在地球上创建选项卡并将它们存储在列表中的专业方法是将该列表保存在 viewpager 适配器中。
我很高兴它有所帮助。
在我的 TabLayout
中,我在 MainActivity
的 onCreate()
方法中动态创建我的登录名 TabItem
,但每次我使用 [=17 退出我的应用程序时=] 按钮,然后我重新进入我的应用程序,它会再次创建该登录名 TabItem
,因此每次都会加倍,我尝试检查并使用:
if(savedInstanceState == null) {
// create the first tab
}
但是没有用,你能帮帮我吗?
这是我的 MainActivity
代码:
public class MainActivity extends AppCompatActivity {
TabLayout tabLayout;
ViewPager viewPager;
public static List<Fragment> fragments = new ArrayList<>();
public static List<String> fragmentsTitle = new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tabLayout = findViewById(R.id.myTabLayout);
viewPager = findViewById(R.id.myViewPager);
MyViewPagerAdapter Adapter = new MyViewPagerAdapter(getSupportFragmentManager());
Adapter.createTab(new LoginFragment(), "Login", getSupportFragmentManager(), viewPager);
viewPager.setAdapter(Adapter);
tabLayout.setupWithViewPager(viewPager);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
public void onTabSelected(TabLayout.Tab tab) {
}
public void onTabUnselected(TabLayout.Tab tab) {
}
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
}
这是 FragmentPagerAdapter
public class MyViewPagerAdapter extends FragmentPagerAdapter {
public MyViewPagerAdapter(FragmentManager manager) { super(manager);}
public void createTab(Fragment fragment, String title, FragmentManager manager, ViewPager viewPager) {
MyViewPagerAdapter Adapter = new MyViewPagerAdapter(manager);
MainActivity.fragments.add(fragment);
MainActivity.fragmentsTitle.add(title);
Adapter.notifyDataSetChanged();
viewPager.setAdapter(Adapter);
}
public Fragment getItem(int position) {
return MainActivity.fragments.get(position);
}
public CharSequence getPageTitle(int position) {
return MainActivity.fragmentsTitle.get(position);
}
public int getCount() {
return MainActivity.fragments.size();
}
}
尝试从 MainActivity 的列表中删除静态关键字。而是使用 final 来防止重新初始化列表。 它每次都会创建该选项卡,因为静态的东西只要被杀死就会保持活力。在地球上创建选项卡并将它们存储在列表中的专业方法是将该列表保存在 viewpager 适配器中。 我很高兴它有所帮助。