Dynamically add and remove tabs in TabLayout(material design) android

后端 未结 5 862
自闭症患者
自闭症患者 2020-12-13 03:53

I have a TabLayout and inside that I have ViewPager. I need to dynamically add and remove tab in tablayout(material design). I can able to add the tabs dynamically but while

相关标签:
5条回答
  • 2020-12-13 04:28

    In addition to existing answers, to remove all tabs from tabLayout.

    tabLayout.removeAllTabs();
    
    0 讨论(0)
  • 2020-12-13 04:32

    Removetab from tablayout

    TabActivity and ViewPager code :

    `public class ScrollableTabsActivity extends AppCompatActivity {

    int NumberOfTab = 5;
    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    ViewPagerAdapter adapter ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scrollable_tabs);
    
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        adapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);
    
        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    
        int length = tabLayout.getTabCount();
    
        for (int i = 0; i < length; i++) {
            tabLayout.getTabAt(i).setCustomView(getTabView(i));
        }
    
    }
    
    public View getTabView(final int position) {
        View view = LayoutInflater.from(this).inflate(R.layout.close_tablayout, null);
        TextView title = (TextView) view.findViewById(R.id.title);
        ImageView icon = (ImageView) view.findViewById(R.id.close);
        title.setText(adapter.getPageTitle(position));
        icon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                NumberOfTab = NumberOfTab - 1;
                setupViewPager(viewPager);
                tabLayout.setupWithViewPager(viewPager);
                if (tabLayout.getTabCount()==3)
                    tabLayout.setTabMode(TabLayout.MODE_FIXED);
    
                int length = tabLayout.getTabCount();
                for (int i = 0; i < length; i++) {
                    tabLayout.getTabAt(i).setCustomView(getTabView(i));
                }
    
    
            }
        });
    
        return view;
    }
    
    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
    }
    
    class ViewPagerAdapter extends FragmentPagerAdapter {
    
        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }
    
        @Override
        public Fragment getItem(int position) {
            final Fragment result;
            switch (position) {
                case 0:
                    // First Fragment of First Tab
                    result = new OneFragment();
                    break;
                case 1:
                    // First Fragment of Second Tab
                    result = new TwoFragment();
                    break;
                case 2:
                    // First Fragment of Second Tab
                    result = new ThreeFragment();
                    break;
                case 3:
                    // First Fragment of Second Tab
                    result = new FourFragment();
                    break;
    
                case 4:
                    // First Fragment of Second Tab
                    result = new FiveFragment();
                    break;
    
                default:
                    result = null;
                    break;
            }
    
            // Log.d("RESULT",result.getTag());
            return result;
        }
    
        @Override
        public int getCount() {
            return NumberOfTab;
        }
    
        @Override
        public CharSequence getPageTitle(final int position) {
            switch (position) {
                case 0:
                    return "One";
                case 1:
                    return "Two";
                case 2:
                    return "Three";
                case 3:
                    return "Four";
                case 4:
                    return "Five";
                default:
                    return null;
            }
        }
    
    }
    

    }`

    Check out this Links : https://stackoverflow.com/a/58480151/9223264

    I am new in stackoverflow i try my best if you think my answer is useful then please appreciate

    0 讨论(0)
  • 2020-12-13 04:38

    Remove tab from TabLayout

    ...
    public void removeTab(int position) {
        if (mTabLayout.getTabCount() >= 1 && position<mTabLayout.getTabCount()) {
              mTabLayout.removeTabAt(position);
              mPagerAdapter.removeTabPage(position);
        }
    }
    ...
    

    Add a removeTabPage method to your PagerAdapter

    ...
    public void removeTabPage(int position) {
        if (!tabItems.isEmpty() && position<tabItems.size()) {
              tabItems.remove(position);
              notifyDataSetChanged();
        }
    }
    ...
    

    Add a Tab

    ...
    private void addTab(String title) {
            mTabLayout.addTab(mTabLayout.newTab().setText(title));
            mPagerAdapter.addTabPage(title);
    }
    ...
    

    Add a addTabPage method to your PagerAdapter

    ...
    public void addTabPage(String title) {
          tabItems.add(title);
          notifyDataSetChanged();
    }
    ...
    

    Check out this sample code for a full example: ...samples/SupportDesignDemos/src/com/example/android/support/design/widget/TabLayoutUsage.java

    0 讨论(0)
  • 2020-12-13 04:40

    With the new support library (I'm using 23.2.1) you should only add to the Viewpager and not the TabLayout (otherwise you end up with double tabs and other funky behavior). So to update TouchBoarder's answer:

    Add a removeTabPage method to your PagerAdapter

    public void removeTabPage(int position) {
        if (!tabItems.isEmpty() && position<tabItems.size()) {
              tabItems.remove(position);
              notifyDataSetChanged();
        }
    }
    

    Add a addTabPage method to your PagerAdapter

    public void addTabPage(String title) {
          tabItems.add(title);
          notifyDataSetChanged();
    }
    
    0 讨论(0)
  • 2020-12-13 04:45

    You can add dynamic tabs like this :

     public void addTabs(){
        for(YourClassModel tabName: tabsName){
            Log.i("ActivityClass","tabName"+tabName);
            tabLayout.addTab(tabLayout.newTab().setText(tabName.getName()));
    
        }
    
    0 讨论(0)
提交回复
热议问题