gpt4 book ai didi

android - 如何在 Kotlin 中保存延迟发帖的状态

转载 作者:行者123 更新时间:2023-11-29 02:19:33 25 4
gpt4 key购买 nike

对于 Android 应用程序,我有一些内容想要延迟显示。因此我正在使用处理程序。

private lateinit var mHandler: Handler

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

linearLayout.isVisible = false

mHandler = Handler()
mHandler.postDelayed({
linearLayout.isVisible = true
}, 1000)
}

如何保存此状态(例如在旋转应用程序的情况下)?使用 SharedPreferences 或类似的东西是否更好:

override fun onSaveInstanceState(outState: Bundle?) {
super.onSaveInstanceState(outState)

}

override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
super.onRestoreInstanceState(savedInstanceState)

}

最佳答案

我建议使用较新的 ViewModel组件来解决这样的事情。 ViewModel 不会像 Activity 和 fragment 那样在配置更改时被破坏,因此您可以运行您的 Handler(或 Timer)而不必担心失去它的状态。

class MainViewModel : ViewModel() {
private val layoutVisibility: MutableLiveData<Boolean> by lazy {
MutableLiveData().also {
delayVisibility()
}
}

private fun delayVisibility() {
Timer().schedule(1000) {
layoutVisibility.postValue(true)
}
}
}

class MainActivity : AppCompatActivity() {
private lateinit var model: MainViewModel

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
model = ViewModelProviders.of(this)[MainViewModel::class.java]

linearLayout.isVisible = false

model.layoutVisibility.observe(this, Observer<Boolean> { visibility ->
linearLayout.isVisible = visibility == true
})
}
}

可以保存处理程序的状态——通过保存开始时间并计算重新创建 Activity 时已经过去了多少时间——但 ViewModel 架构似乎更对我来说很直观。

class MainActivity : AppCompatActivity() {
private lateinit var startTime: Long

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

linearLayout.isVisible = false

var elapsedTime: Long = 0L
if (savedInstanceState != null) {
startTime = savedInstanceState.getLong(KEY_START_TIME, System.currentTimeMillis())
elapsedTime = System.currentTimeMillis() - startTime
} else {
startTime = System.currentTimeMillis()
}

if (elapsedTime >= 1000) {
linearLayout.isVisible = true
} else {
Handler().postDelayed({
linearLayout.isVisible = true
}, 1000 - elapsedTime)
}
}

override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putLong(KEY_START_TIME, startTime)
}

companion object {
private const val KEY_START_TIME = "start_time"
}
}

关于android - 如何在 Kotlin 中保存延迟发帖的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57257708/

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