如何在 TabLayout Android 中侦听滚动事件



我在我的项目中使用了TabLayout,该项目可能有10个以上的TabItems。现在我想在用户滚动 TabLayout 时隐藏另一个视图。

注意:我没有使用任何ViewPager。

View 的每个实例都调用getViewTreeObserver() 。您可以使用 addOnScrollChangedListener() 向其添加OnScrollChangedListener()

在您的情况下:

tabLayout.getViewTreeObserver().addOnScrollChangedListener(() -> {
        int scrollX = tabLayout.getScrollX(); // Current x scrolling position
        // We know that we have at least one child
        int maxScrollWidth = categoryTabLayout.getChildAt(0).getMeasuredWidth() - windowSize.x;
        // Do whatever you want here
    });

窗口大小是从WindowManager访问的点

private Point windowSize = new Point();
// Calculate the position if this window
getActivity().getWindowManager().getDefaultDisplay().getSize(windowSize);

通过使用上述方法,您将获得有关所需正确滚动位置的更新

TabLayout 有自己的选项卡更改侦听器回调功能。用

页面更改侦听器:

TabLayout.TabLayoutOnPageChangeListener(TabLayout tabLayout)

检查此链接: OnTab 更改侦听器以获取详细信息

在选项卡所选侦听器上:

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
    @Override
    public void onTabSelected(TabLayout.Tab tab){
        int position = tab.getPosition();
    }
});

检查更多信息:onTabSelected Listener

如果您将 TabLayout 与 ViewPager 一起使用,如下所示:

viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);

然后,您可以使用:

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener(){
        @Override
        public void onPageScrolled(int position, float positionOffset,
                int positionOffsetPixels){
        }
        @Override
        public void onPageSelected(int position){
        }
        @Override
        public void onPageScrollStateChanged(int state){
        }
    });

在方法中 PageSelected(),您可以根据显示的选项卡执行所需的操作。

最后,

当您滚动到最后一个选项卡可见时,我得到了解决方案。下面是给出的代码。希望它会有所帮助。

      val lastTabIndex =  yourTabLayout.tabCount - 1
    val lastTab =  yourTabLayout.getTabAt(lastTabIndex)
   yourTabLayout.getViewTreeObserver().addOnScrollChangedListener {
        val scrollX = yourTabLayout.scrollX
        val tabsWidth = yourTabLayout.getChildAt(0).width
        val tabsViewWidth = yourTabLayout.width
        if (scrollX + tabsViewWidth >= tabsWidth) {
            // Tabs are scrolled to the right end
            // You can perform any actions you need here
           
          // Get the last tab and do whatever you need with it
            lastTab?.let {
                //perform the action with last tab
            }
        }else{
           /* Write the code when your are not in last tab position.
             */
        }
    }

最新更新