在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(); }