微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

添加“所有项目”标签以及其他动态创建的标签

如何解决添加“所有项目”标签以及其他动态创建的标签

我对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;
    }
}

这是输出

enter image description here

我想要的是这样的其他标签

enter image description here

我试图将选项卡添加到循环外,然后将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();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。