在Android中销毁布局时覆盖的方法

时间:2012-01-25 10:44:29

标签: android view activity-lifecycle

我有一个扩展LinearLayout的自定义组件,我需要在销毁或删除Layout时执行某些语句。 (或即将被删除)

一种方法是检查活动的onPause()或onDestroy()并调用自定义组件的方法。但我想从活动中删除这些开销。 因此,自定义组件本身可以在分离布局时进行处理。但我发现删除布局时找到合适的方法来覆盖(检测事件)。有没有办法处理这个,或者我们需要使用onPause()和onResume()活动方法?

3 个答案:

答案 0 :(得分:73)

我成功覆盖了onAttachedToWindow()onDetachedFromWindow()方法:

@Override
protected void onAttachedToWindow() {
    super.onAttachedToWindow();
    // View is now attached
}

@Override
protected void onDetachedFromWindow() {
    super.onDetachedFromWindow();
    // View is now detached, and about to be destroyed
}

答案 1 :(得分:9)

您可以让自定义视图收听自己的活动。我建议使用View.OnAttachStateChangeListener并听取onAttach事件。

@Override
void onViewDetachedFromWindow(View v) {
 doCleanup();
}

答案 2 :(得分:5)

依靠布局的“破坏”来执行语句是危险的,因为你不能直接控制何时发生这种情况。接受的方式和良好做法是使用活动的生命周期

但是如果你真的想将你的组件绑定到生命周期,我建议你的组件实现一个接口(类似Removable),并在你的基本活动classe中做类似的事情(你的所有活动都延伸了):

protected Set<Removable> myRemovableItems = new HashSet<Removable>();

@Override
public void onPause() {
    super.onPause();
    for (Removable removable : myRemovableItems) {
        removable.remove();
    }
}

界面:

public interface Removable {
    void remove();
}

然后,每次从活动中添加一个自定义组件时,都会将该组件添加到活动的内部Removable集中,并且每次都会自动调用其remove方法活动暂停。

这将允许您指定在组件本身内调用onPause时要执行的操作。但它不能确保它自动被称为,因为你必须在活动中这样做。

注意:您可以使用onStop代替onPause,具体取决于您希望删除的时间。