Метод переопределения, когда макет уничтожен в Android
У меня есть пользовательский компонент, который расширяет LinearLayout, мне нужно выполнять определенные операторы, когда Layout уничтожен или удален. (или собирается быть удаленным)
Один из способов - проверить onPause() или onDestroy () действия и вызвать методы пользовательского компонента. Но я хочу снять эти накладные расходы с активности. Так что сам пользовательский компонент может обрабатывать, когда макет отсоединен. Но я не могу найти подходящий метод для переопределения (обнаружения события) при удалении макета. Есть ли способ справиться с этим, или нам нужно использовать метод действия onPause() и onResume()?
3 ответа
Опасно полагаться на "разрушение" макета для выполнения операторов, поскольку вы не можете непосредственно контролировать, когда это произойдет. Общепринятым способом и хорошей практикой является использование для этого жизненного цикла мероприятия.
Но если вы действительно хотите связать свой компонент с этим жизненным циклом, я предлагаю вашему компоненту реализовать интерфейс (что-то вроде 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
}
Вы можете иметь свой собственный вид слушать свои собственные события. Я предлагаю использовать View.OnAttachStateChangeListener и прослушивать событие onDetach.
@Override
void onViewDetachedFromWindow(View v) {
doCleanup();
}