我正在尝试以编程方式选择特定片段,例如 ViewPager2 中的第二个或第三个片段。它无法正常工作。有时有效,有时无效。虽然它每次都适用于 TabLayout。
我试过的:
- 我试过使用ViewPager2.post 之类的
paymentViewpager.post { paymentViewpager.currentItem = 1 }
。 - 尝试添加回调
paymentViewpager.setCurrentItem(tab.position, true)
。TabLayoutMediator
- 我已经仔细检查了我在
paymentViewpager.setCurrentItem
设置适配器后是否正在调用。
代码如下。
在 Activity 的 onCreate 中
if (!isGuestUser) {
getPaymentMethod()
viewModel.getMyProfile()
} else {
val adapter = SecureCheckoutPaymentSelectionAdapter(
activity = this,
callback = this,
gPayCallback = this,
paypalCallBack = this,
cardPaymentList = arrayListOf(),
gPayPaymentDetail = arrayListOf(),
payPalPaymentDetail = arrayListOf(),
isPaymentMethodPresent = false,
itemsCount = THREE,
userType = userType,
isGuestUser
)
binding.includeSecureCheckoutPaymentDetails.paymentViewpager.adapter = adapter
initTabLayout()
}
private fun initTabLayout() {
TabLayoutMediator(binding.includeSecureCheckoutPaymentDetails.paymentTab, binding.includeSecureCheckoutPaymentDetails.paymentViewpager) { tab, position ->
val view = DataBindingUtil.inflate<LayoutTabImageBinding>(LayoutInflater.from(this), R.layout.layout_tab_image, tab.view, true)
when (position) {
0 -> {
view.icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.card_payment))
}
1 -> {
view.icon.setBackgroundResource(R.drawable.google_pay_primary_logo)
}
else -> {
view.icon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.paypal_card))
}
}
tab.customView = view.root
binding.includeSecureCheckoutPaymentDetails.paymentViewpager.setCurrentItem(tab.position, true)
}.attach()
}
当 API 响应一段时间后,我需要选择 ViewPager2 的 2nd Fragment。下面的代码在该函数中执行。
val adapter = SecureCheckoutPaymentSelectionAdapter(
activity = this,
callback = this,
gPayCallback = this,
paypalCallBack = this,
cardPaymentList = if (userType == PERSONAL_USER_TYPE) paymentSavedResponse.personalCards as ArrayList<PaymentMethod>
else paymentSavedResponse.businessCards as ArrayList<PaymentMethod>,
gPayPaymentDetail = paymentSavedResponse.googlePay as ArrayList<GooglePay>,
payPalPaymentDetail = paymentSavedResponse.paypalAccount,
isPaymentMethodPresent = paymentSavedResponse.paymentMethodPresent,
itemsCount = THREE,
userType = userType,
isGuestUser
)
binding.includeSecureCheckoutPaymentDetails.paymentViewpager.adapter = adapter
initTabLayout()
setViewPagerClick()
if (paymentSavedResponse.latestPaymentDetails?.paymentMethodPresent == true) {
Log.e("mk", "in paymentMethodPresent == true...")
when {
paymentSavedResponse.latestPaymentDetails.paymentMethod.size > ZERO -> {
Log.e("mk", "in card...")
binding.includeSecureCheckoutPaymentDetails.apply {
paymentViewpager.currentItem = ZERO
//paymentTab.selectTab(paymentTab.getTabAt(ZERO))
}
}
paymentSavedResponse.latestPaymentDetails.googlePay.size > ZERO -> {
Log.e("mk", "in GPay...")
binding.includeSecureCheckoutPaymentDetails.apply {
paymentViewpager.currentItem = ONE
//paymentTab.selectTab(paymentTab.getTabAt(ONE))
}
}
else -> {
Log.e("mk", "in Else...")
binding.includeSecureCheckoutPaymentDetails.apply {
paymentViewpager.currentItem = TWO
//paymentTab.selectTab(paymentTab.getTabAt(TWO))
}
}
}
}
我在这里遇到了同样的问题,但尚未接受答案。任何帮助,将不胜感激。