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

Posted

技术标签:

【中文标题】添加“所有项目”标签以及其他动态创建的标签 Android【英文标题】:Add an 'ALL ITEMS' tab along with other dynamically created tabs Android 【发布时间】:2021-02-17 20:34:12 【问题描述】:

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

有没有办法。请帮忙。

【问题讨论】:

【参考方案1】:

您只是没有我假设的元素“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)));

在这种情况下,您将添加选项卡“全部”,然后添加数组中的所有其他项目,并且永远不会得到IndexOutOfBoundException

【讨论】:

【参考方案2】:

用这部分代码更新for循环

for (int l = 0; l &lt; internalCat.size()-1; l++) product_tabs_layout.addTab(product_tabs_layout.newTab().setText(internalCat.get(l)));

【讨论】:

【参考方案3】:

以上解决方案对我不起作用。

我通过手动添加“ALL”作为列表中的第一个元素来解决它,然后从 Index = 1 开始添加剩余的项目;

这样,我将第一个元素作为 ALL 选项卡,其余的按我的意愿。

代码:

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();

【讨论】:

以上是关于添加“所有项目”标签以及其他动态创建的标签 Android的主要内容,如果未能解决你的问题,请参考以下文章

将标签页动态添加到页面控件并嵌入表单?

MFC用CMFCTabCtrl类动态创建标签页,怎样添加消息响应

WebService的创建和部署以及通过反射动态调用WebService

动态添加 QTableView 到动态创建的标签页 (QTabWidget) [已解决]

动态创建列表并在每个新创建的元素中添加 HTML 标签

如何动态创建带有默认项目的标签栏?