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:
dongliang
2026-04-27 19:39:47 +09:30
parent 06f7c7f20e
commit 2df2cd0cc2

View File

@@ -155,8 +155,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
// ===== 设置页 ===== // ===== 设置页 =====
/** 绑定设置页 View 引用 */ /** 保存 configPage 引用,用于直接填充数据 */
private lateinit var configPageView: View
/** 绑定设置页 View 引用并直接填充数据 */
private fun bindConfigViews(page: View) { private fun bindConfigViews(page: View) {
configPageView = page
configStatusBar = page.findViewById(R.id.statusBar) configStatusBar = page.findViewById(R.id.statusBar)
tvAvatarLetter = page.findViewById(R.id.tvAvatarLetter) tvAvatarLetter = page.findViewById(R.id.tvAvatarLetter)
tvUserName = page.findViewById(R.id.tvUserName) tvUserName = page.findViewById(R.id.tvUserName)
@@ -168,7 +172,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
} }
} }
/** 初始化设置页数据 */ /** 初始化设置页数据(直接用 inflate 好的 configPageView */
private fun initConfigPage() { private fun initConfigPage() {
// 用户信息 // 用户信息
val userName = userPrefs.userName val userName = userPrefs.userName
@@ -182,28 +186,17 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
mobile mobile
} }
// 设备信息 // 设备信息(直接操作已 inflate 的 View不依赖 ViewPager2 的 ViewHolder
val configPage = (binding.viewPager.adapter as? HomePagerAdapter)?.let { return@let null } configPageView.findViewById<TextView>(R.id.tvModel)?.text =
// 通过 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 =
"${devicePrefs.brand} ${devicePrefs.model}" "${devicePrefs.brand} ${devicePrefs.model}"
configView.findViewById<TextView>(R.id.tvOsVersion)?.text = configPageView.findViewById<TextView>(R.id.tvOsVersion)?.text =
"Android ${devicePrefs.osVersion}" "Android ${devicePrefs.osVersion}"
configView.findViewById<TextView>(R.id.tvImei)?.text = run { configPageView.findViewById<TextView>(R.id.tvImei)?.text = run {
val imei = devicePrefs.imei val imei = devicePrefs.imei
if (imei.length > 6) "${imei.substring(0, 3)}***${imei.substring(imei.length - 3)}" if (imei.length > 6) "${imei.substring(0, 3)}***${imei.substring(imei.length - 3)}"
else imei else imei
} }
configView.findViewById<TextView>(R.id.tvAppVersion)?.text = configPageView.findViewById<TextView>(R.id.tvAppVersion)?.text =
"v${BuildConfig.VERSION_NAME}" "v${BuildConfig.VERSION_NAME}"
} }