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

时间:2017-01-10 10:24:51

标签: android android-layout android-tablayout

我在我的项目中使用TabLayout,可能有超过10个TabItems。现在我想在用户滚动TabLayout时隐藏其他视图。

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

3 个答案:

答案 0 :(得分:3)

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

在你的情况下:

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

windowSize是从WindowManager

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

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

答案 1 :(得分:1)

TabLayout有自己的标签更改侦听器回调功能。 使用

onPageChange Listener:

TabLayout.TabLayoutOnPageChangeListener(TabLayout tabLayout)

检查此链接:OnTabChange Listener了解更多信息

onTabSelected Listener:

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

检查更多:onTabSelected Listener

答案 2 :(得分:-1)

如果您将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){

        }
    });

在onPageSelected()方法中,您可以根据显示的标签执行所需的操作。