【问题标题】:Android ViewPager2 - how to detect user initiated page changeAndroid ViewPager2 - 如何检测用户发起的页面更改
【发布时间】:2020-06-25 12:53:08
【问题描述】:

我有 ViewPager2 回调设置,但需要检测用户发起的页面更改何时完成。回调不会区分用户启动和代码启动。这是我现在拥有的:

ViewPager2.OnPageChangeCallback swipeListener = new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageSelected(int position) {
            //I want to run code only if user initiated this page change
            //but this runs whether user initiated or code initiated
        }
}

通过代码完成的页面更改:

viewPager.setCurrentItem(targetSlide);

docs for ViewPager2 显示一个 isUserInputEnabled() 方法,它告诉您用户是否“可以”手动更改页面,但我需要检测用户是否“确实”启动了页面更改。

【问题讨论】:

    标签: java android android-viewpager2


    【解决方案1】:

    您可以在registerOnPageChangeCallback 中使用isFakeDragging 来检测拖动是假的还是用户发起的。

    如果正在进行虚假拖动,则返回 true。

    ...onPageScrolledonPageScrolled(int position, float positionOffset, int positionOffsetPixels){
        if(isFakeDragging)
            {// fake scroll}
        else{// user scroll}
    }
    

    【讨论】:

    • 我不会在代码中发起虚假的拖动来更改页面,因此isFakeDragging 将始终在此处返回false
    • 那么code initiated 是什么意思?您需要添加有关您的用例的完整详细信息。无论如何,如果可能的话,使用假拖动来获得最佳实践和期望的行为。
    • OP 已编辑。我正在使用viewPager.setCurrentItem()
    • @lilbiscuit 那么简单的解决方案是使用布尔标志来跟踪更改,或者另一个选项是使用触摸事件侦听器来检测用户触摸并进行相应的处理。
    【解决方案2】:

    可以重写 viewpager2 以检测页面更改,如下所示:

        viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
            }
        });
    

    【讨论】:

      猜你喜欢
      • 2012-04-15
      • 1970-01-01
      • 2023-04-08
      • 2011-11-16
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多