TabLayout tab selection

前端 未结 25 1460
情深已故
情深已故 2020-11-29 17:15

How should I select a tab in TabLayout programmatically?

 TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
 tabLayout.setupWithViewPager(viewPager         


        
相关标签:
25条回答
  • 2020-11-29 17:44

    If you are using TabLayout with viewPager than this helps you.You set the tablayout with viewpager in addOnpagelistener.

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
            }
    
            @Override
            public void onPageSelected(int position) {
                tabLayout.getTabAt(position).select();
            }
    
            @Override
            public void onPageScrollStateChanged(int state) {
    
            }
        });
    
    0 讨论(0)
  • 2020-11-29 17:45

    If you know the index of the tab you want to select, you can do it like so:

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    TabLayout.Tab tab = tabLayout.getTabAt(someIndex);
    tab.select();
    

    This technique works even if you're using the TabLayout by itself without a ViewPager (which is atypical, and probably bad practice, but I've seen it done).

    0 讨论(0)
  • 2020-11-29 17:45

    try this

        new Handler().postDelayed(
                new Runnable(){
                    @Override
                    public void run() {
                        if (i == 1){
                            tabLayout.getTabAt(0).select();
                        } else if (i == 2){
                            tabLayout.getTabAt(1).select();
                        }
                    }
                }, 100);
    
    0 讨论(0)
  • 2020-11-29 17:47

    add for your viewpager:

     viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    
                @Override
                public void onPageSelected(int position) {
                    array.clear();
                    switch (position) {
                        case 1:
                            //like a example
                            setViewPagerByIndex(0);
                            break;
                    }
                }
    
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                }
    
                @Override
                public void onPageScrollStateChanged(int state) {
                }
            });
    

    //on handler to prevent crash outofmemory

    private void setViewPagerByIndex(final int index){
        Application.getInstance().getHandler().post(new Runnable() {
            @Override
            public void run() {
                viewPager.setCurrentItem(index);
            }
        });
    }
    
    0 讨论(0)
  • 2020-11-29 17:47

    You can set TabLayout position using following functions

    public void setTab(){
     tabLayout.setScrollPosition(YOUR_SCROLL_INDEX,0,true);
     tabLayout.setSelected(true);
    }
    
    0 讨论(0)
  • 2020-11-29 17:48

    If you can't use tab.select() and you don't want to use a ViewPager, you can still programmatically select a tab. If you're using a custom view through TabLayout.Tab setCustomView(android.view.View view) it is simpler. Here's how to do it both ways.

    // if you've set a custom view
    void updateTabSelection(int position) {
        // get the position of the currently selected tab and set selected to false
        mTabLayout.getTabAt(mTabLayout.getSelectedTabPosition()).getCustomView().setSelected(false);
        // set selected to true on the desired tab
        mTabLayout.getTabAt(position).getCustomView().setSelected(true);
        // move the selection indicator
        mTabLayout.setScrollPosition(position, 0, true);
    
        // ... your logic to swap out your fragments
    }
    

    If you aren't using a custom view then you can do it like this

    // if you are not using a custom view
    void updateTabSelection(int position) {
        // get a reference to the tabs container view
        LinearLayout ll = (LinearLayout) mTabLayout.getChildAt(0);
        // get the child view at the position of the currently selected tab and set selected to false
        ll.getChildAt(mTabLayout.getSelectedTabPosition()).setSelected(false);
        // get the child view at the new selected position and set selected to true
        ll.getChildAt(position).setSelected(true);
        // move the selection indicator
        mTabLayout.setScrollPosition(position, 0, true);
    
        // ... your logic to swap out your fragments
    }
    

    Use a StateListDrawable to toggle between selected and unselected drawables or something similar to do what you want with colors and/or drawables.

    0 讨论(0)
提交回复
热议问题