From 2df2cd0cc2f0ca20c7442fff51d7bae303e504cf Mon Sep 17 00:00:00 2001 From: dongliang Date: Mon, 27 Apr 2026 19:39:47 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AE=BE=E7=BD=AE=E9=A1=B5=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=B8=8D=E6=98=BE=E7=A4=BA=20-=20=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E6=93=8D=E4=BD=9Cinflate=E5=A5=BD=E7=9A=84View?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 之前通过ViewPager2内部查找ViewHolder,但Page0未创建时找不到。 改为直接保存inflate好的configPageView引用,数据填充不依赖ViewPager2。 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../com/xiaoqu/watch/ui/home/HomeFragment.kt | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt index 7cadbcf..da08613 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt @@ -155,8 +155,12 @@ class HomeFragment : BaseFragment() { // ===== 设置页 ===== - /** 绑定设置页 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() { } } - /** 初始化设置页数据 */ + /** 初始化设置页数据(直接用 inflate 好的 configPageView) */ private fun initConfigPage() { // 用户信息 val userName = userPrefs.userName @@ -182,28 +186,17 @@ class HomeFragment : BaseFragment() { 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(R.id.tvModel)?.text = + // 设备信息(直接操作已 inflate 的 View,不依赖 ViewPager2 的 ViewHolder) + configPageView.findViewById(R.id.tvModel)?.text = "${devicePrefs.brand} ${devicePrefs.model}" - configView.findViewById(R.id.tvOsVersion)?.text = + configPageView.findViewById(R.id.tvOsVersion)?.text = "Android ${devicePrefs.osVersion}" - configView.findViewById(R.id.tvImei)?.text = run { + configPageView.findViewById(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(R.id.tvAppVersion)?.text = + configPageView.findViewById(R.id.tvAppVersion)?.text = "v${BuildConfig.VERSION_NAME}" }