我有一个自定义视图组件,它可以在片段或活动中使用。我想知道是否有一个回调函数来在从片段/活动销毁时调用它?
视图没有回调函数(除了finalize()
,但我不认为这是你要问的)。当视图从屏幕上移除时,视图有onDetachedFromWindow()
,但这与它被销毁无关——它可以再次附加,这会调用onAttachedToWindow()
。
片段有onDestroyView()
,这可能对你更有用。活动没有等效的方法,但你可以使用onDestroy()
,只要你知道如果系统意外终止你的应用程序,它可能永远不会被调用。
感谢Karakuri的回答,提供了一个可选的解决方案(使用简单的回调)
注意
view OnLayoutChangeListener
在视图从窗口分离之前不会被调用
view.listener = object :OnViewAttachedChangeListener{
override fun onAttachedFromWindow(view: View, isAttached: Boolean) {
}
}
internal class AttachedView(context: Context): View(context){
internal var listener: OnViewAttachedChangeListener?= null
get() = field
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
notifyOnAttachedToWindow(false)
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
notifyOnAttachedToWindow(true)
}
private fun notifyOnAttachedToWindow(isAttached: Boolean){
listener?.onAttachedFromWindow(this, isAttached)
}
}
internal interface OnViewAttachedChangeListener{
fun onAttachedFromWindow(view: View, isAttached: Boolean)
}
onDestroyView()
将被调用? - Android developerView.onDetachedFromWindow()
。 - KarakurionDetachedFromWindow()
仍然不会被调用,但是它会和Activity的onDestroy()
一起被调用吗?这样对吗?我的目标是在应用程序终止时将视图的个人数据存储到SharedPreferences中,并且我想在此View对象中执行此操作,而不是在其布局中具有此视图的Activity中。 - Android developeronDetachedFromWindow()
方法在 View 不再附加到其窗口时被调用,这意味着它没有可绘制的表面。这应该在 Activity 对用户不再可见时发生,这可能比系统决定终止您的 Activity 更早。 - Karakuri