问题描述
我对android来说还很陌生,并且制作了一个视图,其中根据名称数组填充了许多标签。
我已成功完成此操作,但我想在标签的开头添加一个附加标签,其标题为“所有项目”。
private void tabsInit() {
for (int l = 0; l < internalCat.size(); L++) {
product_tabs_layout.addTab(product_tabs_layout.newTab().setText(internalCat.get(l)));
}
ProductPagerAdapter adapter = new ProductPagerAdapter(getSupportFragmentManager(),product_tabs_layout.getTabCount(),internalCat);
product_viewpager.setAdapter(adapter);
product_viewpager.addOnPagechangelistener(new TabLayout.TabLayoutOnPagechangelistener(product_tabs_layout));
product_tabs_layout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
product_viewpager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
product_viewpager.setCurrentItem(tab.getPosition());
}
});
}
适配器:
public class ProductPagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
List<String> lstInternalCats;
public ProductPagerAdapter(@NonNull FragmentManager fm,int mNumOfTabs,List<String> lstInternalCats) {
super(fm);
this.mNumOfTabs = mNumOfTabs;
this.lstInternalCats = lstInternalCats;
}
@NonNull
@Override
public Fragment getItem(int position) {
return new ProductsFragment().newInstance(lstInternalCats.get(position));
}
@Override
public int getCount() {
return mNumOfTabs;
}
}
这是输出:
我想要的是这样的其他标签:
我试图将选项卡添加到循环外,然后将tabscount + 1传递给选项卡数量,但这给了我错误。
java.lang.indexoutofboundsexception: Index: 4,Size: 4
有没有办法做到这一点。请帮忙。
解决方法
我只是假设您没有元素“ All”数组。因此,即使您写internalCat.size() + 1
也不会存在。您应该像这样手动添加它:
product_tabs_layout.addTab(product_tabs_layout.newTab().setText("All"));
for (int l = 0; l < internalCat.size(); l++) {
product_tabs_layout.addTab(product_tabs_layout.newTab().setText(internalCat.get(l)));
}
在这种情况下,您将添加选项卡“ All”,然后再添加数组中的所有其他项,并且永远不会获得IndexOutOfBoundException
使用这部分代码更新for循环
for (int l = 0; l < internalCat.size()-1; l++) { product_tabs_layout.addTab(product_tabs_layout.newTab().setText(internalCat.get(l))); }
以上解决方案对我不起作用。
我通过手动添加“ALL”作为列表中的第一个元素来解决它,然后添加从Index = 1开始的剩余项目;
通过这种方式,我将第一个元素作为所有选项卡,其余的都是我想要的。
代码:
AtomicInteger index = new AtomicInteger(1);
internalCat.add(0,"All");
for (int i = 0; i < array.length(); i++) {
internalCat.add(index.get(),array.getString(i));
index.getAndIncrement();
}