代码之家  ›  专栏  ›  技术社区  ›  chinmay

如何在滚动时更新选项卡的值

  •  0
  • chinmay  · 技术社区  · 7 年前

    我已经在android中实现了选项卡布局。我有3个选项卡设置,时钟,丢失的设备。滚动时,会更新选项卡的内容,但不会更新标题。但如果我选择任何选项卡标题,就会显示内容。 当我启动应用程序时,它会显示3个选项卡。假设当前突出显示的选项卡是时钟。当我向右滚动时,将显示设置选项卡的内容,但当前突出显示的选项卡仍然是时钟。它应该是根据我的需要设置。

    我的代码是 这是主要活动->

    public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener{
    
        //This is our tablayout
        private TabLayout tabLayout;
    
        //This is our viewPager
        private ViewPager viewPager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //Adding toolbar to the activity
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            //Initializing the tablayout
            tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    
            //Adding the tabs using addTab() method
            tabLayout.addTab(tabLayout.newTab().setText("clock"));
            tabLayout.addTab(tabLayout.newTab().setText("settings"));
            tabLayout.addTab(tabLayout.newTab().setText("lost devices"));
            tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    
            //Initializing viewPager
            viewPager = (ViewPager) findViewById(R.id.pager);
    
            //Creating our pager adapter
            Pager adapter = new Pager(getSupportFragmentManager(), tabLayout.getTabCount());
    
            //Adding adapter to pager
            viewPager.setAdapter(adapter);
    
            //Adding onTabSelectedListener to swipe views
            tabLayout.setOnTabSelectedListener(this);
        }
    
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }
    
        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
    
        }
    
        @Override
        public void onTabReselected(TabLayout.Tab tab) {
    
        }
    }
    

    寻呼机->

    public class Pager extends FragmentStatePagerAdapter {
    
        //integer to count number of tabs
        int tabCount;
    
        //Constructor to the class
        public Pager(FragmentManager fm, int tabCount) {
            super(fm);
            //Initializing tab count
            this.tabCount= tabCount;
        }
    
        //Overriding method getItem
        @Override
        public Fragment getItem(int position) {
            //Returning the current tabs
            switch (position) {
                case 0:
                    clock tab1 = new clock();
                    return tab1;
                case 1:
                    settings tab2 = new settings();
                    return tab2;
                case 2:
                    map tab3 = new map();
                    return tab3;
                default:
                    return null;
            }
        }
    
        //Overriden method getCount to get the number of tabs
        @Override
        public int getCount() {
            return tabCount;
        }
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Truong Giang Dam    7 年前

    这是由于TabLayout和ViewPager是相互独立的。您需要更新他们的状态,以防其中一人进行更改。选择选项卡后,您已完成更新ViewPager状态。但反之亦然,当ViewPager滚动时,您需要更新Tablayout。

    1. 为viewPager添加侦听器: viewPager.addOnPageChangeListener(this); . 这将需要您实现一些方法。

      @Override
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
           // don't use in that's case
      }
      
      @Override
      public void onPageSelected(int position) {
          // update Tablayout here
          TabLayout.Tab tab = tabLayout.getTabAt(position);
          if (tab != null) {
             tab.select();
          }
      }
      
      @Override
      public void onPageScrollStateChanged(int state) {
         // don't use in that's case
      }
      
    2. 如果不再使用侦听器,请不要忘记将其删除

      viewPager.removeOnPageChangeListener(this);
      

    希望对你有帮助!

        2
  •  -1
  •   Abhishek Singh    7 年前

    您已经使用选项卡布局设置了viewpager。添加此

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        .....
        ......
        ....
    
        //Adding adapter to pager
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);
        //Adding onTabSelectedListener to swipe views
        tabLayout.setOnTabSelectedListener(this);
    }