android 如何在ViewPager2中禁用滑动?

ztigrdn8  于 2023-01-07  发布在  Android
关注(0)|答案(5)|浏览(799)

在新的android viewpager2组件中是否可以启用-禁用刷卡?

yruzcnhs

yruzcnhs1#

现在可以使用Version 1.0.0-alpha02启用/禁用滑动viewpager2
使用**implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'**

版本1.0.0
新功能

  • 能够禁用用户输入(setUserInputEnabledisUserInputEnabled
    API变更
  • ViewPager2类期末考试
    错误修复
  • FragmentStateAdapter稳定性修复
    在viewpager 2中禁用滑动的示例代码
myViewPager2.setUserInputEnabled(false);

在viewpager 2中启用滑动功能的示例代码

myViewPager2.setUserInputEnabled(true);
ffx8fchx

ffx8fchx2#

如果您正在使用Android数据绑定,您可以简单地禁用它的布局xml文件.

app:userInputEnabled="@{false}"
uyto3xhc

uyto3xhc3#

viewPager2.setUserInputEnabled(false);
vbkedwbf

vbkedwbf4#

在引擎盖下ViewPager2RecyclerView一起工作来膨胀碎片视图,但是RecyclerView是隐藏的,所以他们使它更白痴的证明。

val rv : RecyclerView = viewPager.getChildAt(0) as RecyclerView
 rv.layoutManager = NonScrollingLayoutManager( rv.context, rv.layoutManager as LinearLayoutManager)

一个很有技巧的方法是获取位置为0的子元素,即RecyclerView,并通过 Package 布局管理器来禁用布局管理器中的滚动:

inner class NonScrollingLayoutManager(context: Context, val layoutManager: LinearLayoutManager) :
    LinearLayoutManager(context, layoutManager.orientation, layoutManager.reverseLayout) {

    override fun canScrollVertically(): Boolean  = layoutManager.orientation == HORIZONTAL

    override fun canScrollHorizontally(): Boolean  =  layoutManager.orientation == VERTICAL

}

请注意,如果API更改了用于RecyclerView的布局管理器,即它们远离LinearLayoutManager,这将不起作用,它将需要覆盖一些方法,并确保调用超级方法。
第二种方法是将ViewPager2子类化,即ViewGroup,然后在将触摸事件调度到子视图(您可能会猜到RecyclerView)之前,神奇地拦截触摸事件,注意不要阻止点击。

vhmi4jdf

vhmi4jdf5#

是的,有可能。
mViewPager2.setUserInputEnabled(false);//禁用滑动
mViewPager2.setUserInputEnabled(true);//启用滑动
我们可以基于选项卡禁用和启用,如以下代码所示

ViewPager2 mViewPager2 = findViewById(R.id.view_pager);
        mViewPager2.setOffscreenPageLimit(adapter.getItemCount() - 1);
        mViewPager2.setAdapter(adapter); 

        TabLayout tabLayout  = findViewById(R.id.sliding_tabs);
        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                //do stuff here
                if(tab.getPosition() == 0){
                    **//ToDisable**
                    mViewPager2.setUserInputEnabled(false);
                }else{
                    **//ToEnable**
                    mViewPager2.setUserInputEnabled(true);
                }

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

相关问题