gpt4 book ai didi

kotlin - 本地广播不更新 UI

转载 作者:行者123 更新时间:2023-12-02 13:38:51 24 4
gpt4 key购买 nike

我的注册用户事件中有此代码:

val userDataChange = Intent(BROADCAST_USER_DATA_CHANGE)
userDataChange.putExtra("aaa", "aaaaaaaa")
userDataChange.putExtra("bbb", 123)
LocalBroadcastManager.getInstance(this).sendBroadcast(userDataChange)

在主要事件中,接收者:
LocalBroadcastManager.getInstance(this)
.registerReceiver(userDataChangeReceiver,
IntentFilter(BROADCAST_USER_DATA_CHANGE))

和 userDatachangeReceiver 函数:
private val userDataChangeReceiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.d("aaa", AuthService.isLoggedIn.toString())
userNameNavHeader.text = "BBBBBBBBBBB"
if (AuthService.isLoggedIn == true) {
userNameNavHeader.text = userDataService.name
userEmailNavHeader.text = userDataService.email
val resourceId = resources.getIdentifier(userDataService.avatarName, "drawable",
packageName)
userImageNavHeader.setImageResource(resourceId)
userImageNavHeader.setBackgroundColor(userDataService.returnAvatarColor(userDataService.avatarColor))
loginButtonNavHeader.text = "Logout"
}
}
}

创建用户事件更新 userDataService 就好了,当我记录它时,我得到了正确的参数。
AuthService.isLoggedIn 返回 true 但抽屉 UI 未更新
我试图把它放在 onStart 中,onResume 在 onPause 上取消注册但没有运气,当我尝试访问意图内的包时,我得到空值。
我把它放在那里只是为了看看它是否真的通过了
有任何想法吗?

最佳答案

您首先需要获取对 nav_header_main 布局的引用,以便能够更新 nav_header_main 中的 text-View 和 image-view。而不是直接使用元素的 id 你应该使用 nav_header 引用然后 id 像这样

private val userDataChangeReceiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {

if(AuthService.isLoggedIn){
Log.d("qwe", UserDataService.name)
Log.d("qwe", UserDataService.email)
Log.d("qwe", UserDataService.avatarName)
Log.d("qwe", "Made it inside the broadcast bro")

Log.d("qwe", "Wrap")


nav_drawer_header_include.userEmailNavHeader.text = UserDataService.email
nav_drawer_header_include.userNameNavHeader.text = UserDataService.name
userEmailNavHeader.text = UserDataService.email
val resourseid= resources.getIdentifier(UserDataService.avatarName,"drawable",packageName)
nav_drawer_header_include.userImageNavHeader.setImageResource(resourseid)
nav_drawer_header_include.loginBtnNavHeader.text="Logout"



}

}

}

我们应该最常使用 Log,它帮助我直接解决问题,而不是把时间浪费在完美的工作上。

我在学习 Android Kotlin 类(class)时也偶然发现了这个问题,但经过搜索,我发现很多人都面临着这个问题,他们在不同的平台上提出了问题,但没有提供答案。但是在搜索相同的术语“UI 元素不更新 android”之后,在 java 中发现了一些堆栈溢出答案如何更改抽屉导航标题中 TextView 的文本?

他们都解释说首先获得引用,然后我们才能更新 View 。然后我尝试了,幸运的是它工作得很好。

PS:这是我的第一个答案,请不要介意错误,我很抱歉。

关于kotlin - 本地广播不更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com