Android应用UI加载异常:需调整窗口或切换悬浮窗才显示
问题:Android应用启动后UI不自动加载,仅调整窗口/悬浮窗时才显示
应用入口已改为LoginActivity,启动后跳转至MainActivity,但MainActivity的RecyclerView内容不会自动加载,只有调整窗口大小或切换悬浮窗模式时才会显示列表数据。
问题分析
你的MainActivity中,Firebase数据库的onDataChange回调里更新了userList,但没有通知RecyclerView的Adapter数据已变更。Adapter不知道数据源发生变化,所以不会触发UI刷新;而调整窗口/切换悬浮窗时,系统会触发Activity的重绘流程,Adapter才会重新绑定数据,这时候列表才显示出来。
修复方案
在onDataChange方法中,更新完userList后调用adapter.notifyDataSetChanged(),强制Adapter刷新UI:
修改后的MainActivity.kt代码:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) mAuth = FirebaseAuth.getInstance() userList = ArrayList() adapter = UserAdapter(this, userList) mDbRef = FirebaseDatabase.getInstance().reference userRecyclerView = findViewById(R.id.userRecyclerView) userRecyclerView.layoutManager = LinearLayoutManager(this) userRecyclerView.adapter = adapter mDbRef.child("user").addValueEventListener(object : ValueEventListener { override fun onDataChange(snapshot: DataSnapshot) { userList.clear() for (postSnapshot in snapshot.children) { val currentUser = postSnapshot.getValue(User::class.java) if (mAuth.currentUser?.uid != currentUser?.uid) { userList.add(currentUser!!) } } // 通知Adapter数据已更新,触发UI刷新 adapter.notifyDataSetChanged() } override fun onCancelled(error: DatabaseError) { // 补充错误处理,便于排查问题 error.toException().printStackTrace() } }) }
额外检查点
- 确认LoginActivity跳转MainActivity的逻辑正确,比如登录成功后通过
startActivity(Intent(this, MainActivity::class.java))跳转,必要时可调用finish()避免返回登录页。 - 检查UserAdapter的实现是否正确,确保能将
userList的数据正确绑定到列表项布局中。
内容的提问来源于stack exchange,提问作者BATMAN_X
相关产品推荐
相关产品推荐

