Android 更改时更新文本片段
因此,我有一个片段,我需要能够始终更新文本 文本字段包括:Android 更改时更新文本片段,android,kotlin,android-fragments,Android,Kotlin,Android Fragments,因此,我有一个片段,我需要能够始终更新文本 文本字段包括: 歌 艺术家 在我的MainActivity中,我有一个http请求,它不断ping服务器并获取最新信息 它更新了一个全局类 package com.drn1.drn1 object DataHolder { private var Song = "" fun set_Song(s: String) { Song = s } fun get_Song(): Str
- 歌
- 艺术家
package com.drn1.drn1
object DataHolder {
private var Song = ""
fun set_Song(s: String) {
Song = s
}
fun get_Song(): String {
return Song
}
private var Artist = ""
fun set_Artist(s: String) {
Song = s
}
fun get_Artist(): String {
return Artist
}
private var MDIA = "http://stream.radiomedia.com.au:8003/stream"
fun set_Media(s: String) {
MDIA = s
}
fun get_Media(): String {
return MDIA
}
}
问题是我无法在片段中重新设置文本
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
//val context = inflater.context
//binding = MplayerBinding.inflate(com.drn1.drn1.R.layout.fragment_mplayer)
val root: View = inflater.inflate(R.layout.fragment_mplayer, container, false)
val btn = root.findViewById(R.id.mPlayPP) as ImageButton
val SG = root.findViewById(R.id.song) as TextView
SG.setText(Song)
}
想知道正确的方法是什么吗?onCreateView()
仅在第一次创建活动时运行
代码中不清楚您在哪里更新
数据持有者
,但是无论您在哪里更新,您都需要在活动中调用一个方法以使用最新数据更新文本视图。正如@Ryan所建议的那样,onCreateView()
只会被调用一次。因此,song textview需要一个类级别变量(在您的示例中,使用SG
class级别变量代替局部变量)
然后创建一个方法来更新歌曲文本
fun updateSong(song: String) {
SG.setText(Song)
}
最后,每当您获得更新的信息时,您必须调用这个片段方法
在
MainActivity
中,当您获得更新的信息时,您将拥有此片段的一个实例。因此,您可以在该对象上调用此方法您不应该每次都发出HTTP请求来保存更新的数据,这是对资源的过度消耗。您需要一些面向连接的方法来实现这一点,可能是套接字。@ADM将对此进行研究,但这并不能解决我如何在应用程序中更新textView的问题fragment@RussellHarrower看看如何使用LiveData和repository模式,google官方培训资源很好地涵盖了这一点,您必须将这一行写为“SG.setText(Song)”在http请求的响应中,您全局调用并删除“SG”文本视图。