[英]How to disable swiping in ViewPager2?
現在可以使用Version 1.0.0-alpha02
啟用/禁用滑動viewpager2
使用implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'
新功能
setUserInputEnabled
, isUserInputEnabled
)API 更改
ViewPager2
類最終Bug修復
FragmentStateAdapter
穩定性修復在 viewpager2 中禁用滑動的示例代碼
myViewPager2.setUserInputEnabled(false);
在 viewpager2 中啟用滑動的示例代碼
myViewPager2.setUserInputEnabled(true);
在引擎蓋下ViewPager2
與RecyclerView
ViewPager2
工作以膨脹片段視圖,但RecyclerView
是隱藏的,因此它們使它更白痴證明。
val rv : RecyclerView = viewPager.getChildAt(0) as RecyclerView
rv.layoutManager = NonScrollingLayoutManager( rv.context, rv.layoutManager as LinearLayoutManager)
hacky 方法是通過包裝布局管理器將子RecyclerView
置於零位置,即RecyclerView
並禁用布局管理器中的滾動:
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
)在攔截觸摸事件中發揮魔力,並注意不要阻止點擊。
如果您使用的是 Android 數據綁定,您可以簡單地禁用它您的布局 xml 文件。
app:userInputEnabled="@{false}"
viewPager2.setUserInputEnabled(false);
是的,有可能。
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) {
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.