在Android中布局被销毁的方法
我有一个扩展LinearLayout的自定义组件,当布局被销毁或删除时,我需要执行某些语句。 (或即将被删除)
一种方法是检查一个活动的onPause()或onDestroy(),并调用自定义组件的方法。 但是我想从活动中移除这个开销。 所以,自定义组件本身可以处理布局分离。 但是我不知道在布局被移除时,find合适的方法来覆盖(检测事件)。 有没有办法来处理这个,或者我们需要使用onPause()和onResume()方法的活动?
依赖布局的“销毁”来执行语句是危险的,因为您不能直接控制这种情况的发生。 接受的方式和良好的做法是使用该活动的生命周期 。
但是如果你真的想把你的组件绑定到这个生命周期 ,我build议你的组件实现一个接口(类似于Removable
),并且在你的基本活动类(所有活动扩展)中做类似的事情:
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
具体取决于您希望何时进行删除。
我有成功覆盖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 }
你可以让你的自定义视图听自己的事件。 我build议使用View.OnAttachStateChangeListener并监听onDetach事件。
@Override void onViewDetachedFromWindow(View v) { doCleanup(); }