fix: 设置页数据不显示 - 直接操作inflate好的View
之前通过ViewPager2内部查找ViewHolder,但Page0未创建时找不到。 改为直接保存inflate好的configPageView引用,数据填充不依赖ViewPager2。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -155,8 +155,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
|
||||
|
||||
// ===== 设置页 =====
|
||||
|
||||
/** 绑定设置页 View 引用 */
|
||||
/** 保存 configPage 引用,用于直接填充数据 */
|
||||
private lateinit var configPageView: View
|
||||
|
||||
/** 绑定设置页 View 引用并直接填充数据 */
|
||||
private fun bindConfigViews(page: View) {
|
||||
configPageView = page
|
||||
configStatusBar = page.findViewById(R.id.statusBar)
|
||||
tvAvatarLetter = page.findViewById(R.id.tvAvatarLetter)
|
||||
tvUserName = page.findViewById(R.id.tvUserName)
|
||||
@@ -168,7 +172,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化设置页数据 */
|
||||
/** 初始化设置页数据(直接用 inflate 好的 configPageView) */
|
||||
private fun initConfigPage() {
|
||||
// 用户信息
|
||||
val userName = userPrefs.userName
|
||||
@@ -182,28 +186,17 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
|
||||
mobile
|
||||
}
|
||||
|
||||
// 设备信息
|
||||
val configPage = (binding.viewPager.adapter as? HomePagerAdapter)?.let { return@let null }
|
||||
// 通过 View 直接查找(configPage 是 ViewPager2 的第一个子 View)
|
||||
binding.viewPager.post {
|
||||
val recyclerView = binding.viewPager.getChildAt(0) as? androidx.recyclerview.widget.RecyclerView
|
||||
val configView = recyclerView?.findViewHolderForAdapterPosition(0)?.itemView
|
||||
configView?.let { fillDeviceInfo(it) }
|
||||
}
|
||||
}
|
||||
|
||||
/** 填充设备信息 */
|
||||
private fun fillDeviceInfo(configView: View) {
|
||||
configView.findViewById<TextView>(R.id.tvModel)?.text =
|
||||
// 设备信息(直接操作已 inflate 的 View,不依赖 ViewPager2 的 ViewHolder)
|
||||
configPageView.findViewById<TextView>(R.id.tvModel)?.text =
|
||||
"${devicePrefs.brand} ${devicePrefs.model}"
|
||||
configView.findViewById<TextView>(R.id.tvOsVersion)?.text =
|
||||
configPageView.findViewById<TextView>(R.id.tvOsVersion)?.text =
|
||||
"Android ${devicePrefs.osVersion}"
|
||||
configView.findViewById<TextView>(R.id.tvImei)?.text = run {
|
||||
configPageView.findViewById<TextView>(R.id.tvImei)?.text = run {
|
||||
val imei = devicePrefs.imei
|
||||
if (imei.length > 6) "${imei.substring(0, 3)}***${imei.substring(imei.length - 3)}"
|
||||
else imei
|
||||
}
|
||||
configView.findViewById<TextView>(R.id.tvAppVersion)?.text =
|
||||
configPageView.findViewById<TextView>(R.id.tvAppVersion)?.text =
|
||||
"v${BuildConfig.VERSION_NAME}"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user