簡體   English   中英

選擇選項卡時如何防止viewpager2翻頁

[英]How to prevent viewpager2 from turning page when a tab is selected

我有一個 viewpager2 綁定到一個帶有許多不同片段的 tablayout,如果他沒有完成每個片段上的一些 textviews,我不希望用戶 select 另一個選項卡。 因此,當用戶 select 另一個選項卡時,我會顯示一條消息,要求完成當前的片段數據。 當用戶 select 另一個選項卡在 TabSelectedListener 的“onTabUnselected”方法中時,我嘗試 select 舊選項卡但沒有成功。 這是代碼,請查看我想防止片段更改的 TODO 注釋。

viewPager = view.findViewById(R.id.mypager)

TabLayoutMediator(tabLayout, viewPager, true, false,
    TabLayoutMediator.TabConfigurationStrategy { tab: TabLayout.Tab, position: Int ->
        tab.text = titles[position]
    }).attach()

tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
    override fun onTabSelected(tab: TabLayout.Tab?) {

    }

    override fun onTabUnselected(tab: TabLayout.Tab?) {
        val currFragment= fragmentSet[tab!!.position]
        if (!currFragment.validateFields()) {
            //TODO: don't change tab, remain in this tab something like tab.aborselectedtTransition
        }
    }

    override fun onTabReselected(tab: TabLayout.Tab?) {
    }

})

有人可以幫我嗎?

我自己解決了,而不是使用 onTabUnselected,最好在 onTouch 事件上使用監聽器,這樣你可以防止 viewpager 更改頁面,只是從 onTouchListener 返回 true。 如果你喜歡,請給我投票。

 viewPager = view.findViewById(R.id.mypager) TabLayoutMediator(tabLayout, viewPager, true, false, TabLayoutMediator.TabConfigurationStrategy { tab: TabLayout.Tab, position: Int -> tab.text = titles[position] tab.view.setOnTouchListener { v, event -> onTabLayoutTouch(v,event) } }).attach() private fun onTabLayoutTouch(view:View, event:MotionEvent):Boolean { val viewTab = view as TabLayout.TabView val tabIndex = viewTab.tab?.position?:-1 var validationOk = true if (event.action == MotionEvent.ACTION_DOWN ) { val currFragment = fragmentSet[viewPager.currentItem] if (viewPager.currentItem.=tabIndex) { val validation = currFragment.validateFields() if (.validation.validationResult && event,action==MotionEvent.ACTION_DOWN) { showMessage(context. "Compila i dati obbligatori.\n ${validation.message}") validationOk = false } } } return !validationOk }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM