【发布时间】:2010-06-30 08:43:36
【问题描述】:
我想在 Activity 被销毁时对视图进行一些清理。当活动被销毁时,有什么方法可以在视图中获取回调?我尝试使用onDetachedFromWindow,但我不确定这样做是否正确。
【问题讨论】:
标签: android view callback android-activity
我想在 Activity 被销毁时对视图进行一些清理。当活动被销毁时,有什么方法可以在视图中获取回调?我尝试使用onDetachedFromWindow,但我不确定这样做是否正确。
【问题讨论】:
标签: android view callback android-activity
如果您想在不重载View.onDetachedFromWindow() 方法的情况下获得回调,您可以使用View.addOnAttachStateChangeListener() 方法,该方法将回调监听器作为单个参数。
【讨论】:
了解不保证会调用 onDestroy,您可以在活动的 onDestroy 方法中回调到您的视图中。
编辑以回应评论: 您可以通过在布局中给它一个 id 并调用 findViewById 来获取任何视图。这是一个例子:
Layout.xml(仅显示最低限度)
<LinearLayout>
<com.example.superwidget.DropDownTouchEnabledListView
android:id="@+id/special_list_view" />
</LinearLayout>
MyActivity.java(同样,最小化并假设正确导入)
@Override
void onDestroy() {
DownTouchEnabledListView v = (DownTouchEnabledListView)findViewById(R.id.special_list_view);
v.doCallback(with, parameters);
}
【讨论】:
findViewById(),获取小部件,将其转换为适当的类,并在其上调用方法。话虽如此,onDetachedFromWindow() 对我来说似乎是一个合理的选择。
onDetachedFromWindow(),除非它会引起问题。
由于View 包含Context,我为此使用LocalBroadcastManager。到目前为止,我还没有遇到任何问题。
View 正在收听destroy event filter。 Activity 然后只需要广播destroy event。
// On View `setup` function
LocalBroadcastManager.getInstance(context).registerReceiver(receiver, filter)
// On Activity
override fun onDestroy() {
super.onDestroy()
LocalBroadcastManager.getInstance(this).sendBroadcast(intent)
}
一旦销毁事件被触发,不要忘记取消注册event filter。
presenter.destroy() // Your clean-up code here
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
您可以在此处找到有关LocalBroadcastManager 的更多详细信息:
【讨论】: