Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我有一个动态表格,但每次我按下后退按钮并再次进入我的应用程序,我的标签就会加倍,为什么?_Android_Android Tablayout_Android Tabs_Fragmentpageradapter - Fatal编程技术网

Android 我有一个动态表格,但每次我按下后退按钮并再次进入我的应用程序,我的标签就会加倍,为什么?

Android 我有一个动态表格,但每次我按下后退按钮并再次进入我的应用程序,我的标签就会加倍,为什么?,android,android-tablayout,android-tabs,fragmentpageradapter,Android,Android Tablayout,Android Tabs,Fragmentpageradapter,在我的TabLayout中,我在我的MainActivity的onCreate()方法中动态创建我的登录名TabItem,但每次我用back按钮退出我的应用程序并重新进入我的应用程序时,它都会再次创建登录名TabItem,因此每次它都会加倍,我尝试检查并使用: if(savedInstanceState == null) { // create the first tab } 但是没用,你能帮我吗? 这是我的main活动的代码: public class MainActivity ext

在我的
TabLayout
中,我在我的
MainActivity
onCreate()
方法中动态创建我的登录名
TabItem
,但每次我用
back
按钮退出我的应用程序并重新进入我的应用程序时,它都会再次创建登录名
TabItem
,因此每次它都会加倍,我尝试检查并使用:

if(savedInstanceState == null) {
   // create the first tab
}
但是没用,你能帮我吗? 这是我的
main活动的代码

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) {

            }
        });
    }
}

尝试从MainActivity中的列表中删除静态关键字。而是使用final来防止重新初始化列表。
它每次都会创建一个标签,因为静态的东西只要被杀死就会保持活力。在地球上创建标签并将其存储在列表中的专业方法是将该列表保存在viewpager适配器中。
我很高兴它很有用。

尝试在MainActivity中从列表中删除静态关键字。改为使用final以防止列表重新初始化。@mnp343我不能使它们成为final,我一直在创建和删除其中的tabitems(片段)。必须有一种专业的方法,为什么每次都要创建登录选项卡?我阻止应用程序创建例如
Register
选项卡,只需检查它是否已经存在,或者是否与
if(fragmentsTitle.contains(“Register”)类似
,但它不适用于
登录
选项卡,这是第一个选项卡,如果我对
登录
选项卡执行此方法,我将返回程序,返回一个空白页!!我不知道为什么!!这没关系,您可以删除选项卡。即使在使它们成为最终选项卡后,您也可以这样做。您正在重新定义数组位置内的值,而不是数组引用自身。它每次都在创建该选项卡,因为静态的东西只要被杀死就会保持活动状态。而创建选项卡并将其存储在列表中的专业方法是将该列表保存在viewpager适配器中。
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();
    }
}