如何检测视图的父活动是否被破坏

问题描述 投票:7回答:3

我想在活动被销毁时在视图中进行一些清理。活动被销毁时,是否有任何方法可以在View中获取回调?我尝试使用onDetachedFromWindow,但不确定这样做是否正确。

android view callback android-activity
3个回答
1
投票

了解到不保证可以调用onDestroy,因此您可以在活动onDestroy方法中回调到视图中。

根据评论进行编辑:您可以通过在布局中为其指定ID并调用findViewById来获取任何视图。这是一个例子:

Layout.xml(仅显示最低要求)

<LinearLayout>
  <com.example.superwidget.DropDownTouchEnabledListView
    android:id="@+id/special_list_view" />
</LinearLayout>

MyActivity.java(再次,最少并假设正确导入)

@Override
void onDestroy() {
    DownTouchEnabledListView v = (DownTouchEnabledListView)findViewById(R.id.special_list_view);
    v.doCallback(with, parameters);
}

7
投票

如果要获得回调而不必重载View.onDetachedFromWindow()方法,则可以使用View.addOnAttachStateChangeListener()方法,该方法将回调侦听器作为单个参数。


0
投票

由于View.addOnAttachStateChangeListener()包含View,为此我使用Context。到目前为止,我还没有遇到任何问题。

LocalBroadcastManager正在收听View。然后destroy event filter只需要广播Activity

destroy event

一旦破坏事件触发,别忘了注销// On View `setup` function LocalBroadcastManager.getInstance(context).registerReceiver(receiver, filter) // On Activity override fun onDestroy() { super.onDestroy() LocalBroadcastManager.getInstance(this).sendBroadcast(intent) }

event filter

您可以在此处找到有关presenter.destroy() // Your clean-up code here LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver) 的更多详细信息:

© www.soinside.com 2019 - 2024. All rights reserved.