android从视图中移除父级

时间:2012-09-03 20:33:30

标签: android view viewgroup

子视图(视图)上的

是否有从其父视图中删除视图的回调?我需要在视图完成后回收一些图像。我一直在网上四处寻找该怎么做,但还没有发现任何有用的东西。

3 个答案:

答案 0 :(得分:8)

我一直在寻找类似的东西。我能找到的最好的是View.OnAttachStateChangeListener。我怀疑它是理想的,因为它是添加View时的回调&从窗口移除 - 不是父母,但它足以满足我的需求。

答案 1 :(得分:5)

您可以在自定义onDetachedFromWindow代码中覆盖View,而不是注册新的侦听器。

答案 2 :(得分:1)

Android KTX (核心KTX)库为您提供了一个不错的解决方案。

您将需要以下依赖项:androidx.core:core-ktx:1.3.0

然后,您可以调用函数“ doOnDetach”,以在从窗口中删除视图时发出您要运行一次代码的信号:

fun myInitCode() {
    ...
    myView.doOnDetach(this::doOnMyViewDetachFromWindow)
    ...
}

fun doOnMyViewDetachFromWindow(view: View) {
    ... put your image cleanup code here ...
}

您可以将lambda传递给“ doOnDetach”,但是根据您需要执行的工作量,上面显示的方法引用可能更简洁。

doOnDetach的描述如下:

androidx.core.view ViewKt.class公共内联乐趣View.doOnDetach( 跨行操作:(查看)→单位):单位

当此视图与窗口分离时,执行给定的操作。如果 视图未附加到窗口,将执行该操作 立即执行,否则将在视图结束后执行该操作 与当前窗口分离。该动作将仅被调用 一次,所有听众都将被删除。