我动态创建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);
}
答案 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
并且不要忘记竖起大拇指:)。
有一个好人...