当我动态创建新的标签图标时,android删除该标签

时间:2019-04-18 11:16:44

标签: android dynamic-programming android-tablayout tabitem android-icons

我动态创建TabItems,并为新标签页分配了一个图标,但是问题是:当我再次“动态”创建另一个标签页时,以前的TabItem图标就消失了!为什么:(?

这是我没有动态创建新标签页时的图片:

https://drive.google.com/file/d/1C80e-Yldlu6asL2H_vCIbwH7cY7Farpn/view?usp=sharing

这是当我用图标创建另一个图像时的图像:

https://drive.google.com/file/d/1i-IXudvYayLf9mGhBGQmyCkjeVkN3xXs/view?usp=sharing

您会看到区别:(。

使用图标创建前三个动态tabitems的代码如下:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_page_drawer);
        this.tabLayout = findViewById(R.id.tab_layout);
        this.viewPager = findViewById(R.id.view_pager);
        tabLayout.setupWithViewPager(viewPager);
        SetUpViewPager(viewPager);
        this.toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        NavigationView navigationView = findViewById(R.id.navigation_view);
        navigationView.setItemIconTintList(null);
        tabLayout.setupWithViewPager(viewPager);
        tabLayout.getTabAt(0).setIcon(R.drawable.lock);
        tabLayout.getTabAt(1).setIcon(R.drawable.contacts);
        tabLayout.getTabAt(2).setIcon(R.drawable.info);

这是我的代码,用于在TabItems中创建新的TabLayout

public void create_user_detail_tab(UserObject userObject) {
        MyViewPagerAdapter Adapter = new MyViewPagerAdapter(getSupportFragmentManager());
        UserDetailFragment userDetailFragment = new UserDetailFragment();
        // the code for AddFragmentPage would be in the next session , i'll paste it's function for you
        Adapter.AddFragmentPage(userDetailFragment,userObject.getName());
        byte[] decodedString = Base64.decode(userObject.getImage(),Base64.NO_WRAP);
        InputStream inputStream  = new ByteArrayInputStream(decodedString);
        Bitmap bitmap  = BitmapFactory.decodeStream(inputStream);
        Bitmap circleBitmap = CircleBitmapConverter.makeCircle(bitmap);
        Drawable d = new BitmapDrawable(getResources(), circleBitmap);
        tabLayout.getTabAt(tabs_number).setIcon(d);
        // tabs_number is number of tabs wich are not changing not dynamic
        TabLayout.Tab tab = tabLayout.getTabAt(tabs_number);
        tab.select();
        // i increase the number of tabs present each time a new one is created ( pretty logical )
        tabs_number++;
    }

这是AddFragmentPage(我在之前的代码中曾说过,如果需要的话,我将为您提供其代码:

public void AddFragmentPage(Fragment frag,String title) {
            addToFragments(frag);
            addToFragmentsTitle(title);
            MyViewPagerAdapter myViewPagerAdapter = new MyViewPagerAdapter(getSupportFragmentManager());
            myViewPagerAdapter.notifyDataSetChanged();
            viewPager.setAdapter(myViewPagerAdapter);
        }

2 个答案:

答案 0 :(得分:0)

myViewPagerAdapter.notifyDataSetChanged();的调用将重新创建所有标签,因此,所有图标都将被删除。

最后一个插入的标签可以保留图标,因为您正在设置notifyDataSetChanged之后的值。

因此,尝试实现一个功能,以便在每次新插入后恢复所有图标。

您可以将所有图标资源保存在AddFragmentPage之前的数组中,然后将其还原。

答案 1 :(得分:0)

要解决此问题,对于不动态的问题,我们只需编写

tabLayout.getTabAt(0).setIcon(R.drawable.lock);
tabLayout.getTabAt(1).setIcon(R.drawable.contacts);
tabLayout.getTabAt(2).setIcon(R.drawable.info);

但是对于动态数组,我们需要创建一个数组,该数组从我创建的变量tabs_number获取其计数器和Drawable对象的位置,因此每次用户添加或删除选项卡{{1} }计算当前选项卡的数量,

因此,我们现在用于创建新标签和向其分配图标的内容如下:

tabs_number
我希望这对您有帮助。也请查看我创建动态标签的解决方案,以便用户可以在此链接中添加或删除: can't change the tabItem ( program crashes ) , when i delete one of my tabItems with code 并且不要忘记竖起大拇指:)。 有一个好人...