我在应用程序中使用导航抽屉模式。
我的一个片段做了一些我希望在导航抽屉打开时停止的工作。
同一个片段也可以生成一个对话框(DialogFragment),同样,我希望在对话框显示在我的片段上时停止正在进行的工作。
我可以设置任何生命周期回调或听众,以便我在一个地方执行此操作吗? (在这两种情况下,我的片段视图都在其他视图之后,单击片段视图的可见部分将被重定向以关闭导航抽屉/对话框)。
目前我有一个从我的主要活动到片段的回调,告诉它有关导航器抽屉打开和关闭的信息,但是我想要更多封装,特别是因为我不得不担心对话框。这可能意味着必须添加状态来跟踪其中的每一个。
我在根视图上尝试了一个焦点监听器,但似乎没有得到任何回调。
我也查看了我的片段的onBackStackChanged回调,我可以将它用于对话框,但不是我认为的导航抽屉吗?
我尝试过的摘要:
尝试了所有这些侦听器接口:
ViewTreeObserver.OnWindowFocusChangeListener,
ViewTreeObserver.OnGlobalFocusChangeListener,
View.OnFocusChangeListener,
ViewTreeObserver.OnGlobalLayoutListener
唯一似乎工作的是OnWindowFocusChangeListener
。这在打开/关闭对话框而不是Nav抽屉时给了我一个调用,并且仅支持API 18 :(
如果我使用子片段管理器添加它,这适用于对话框片段:
@Override
public void onBackStackChanged()
{
FragmentManager fragmentManager = getChildFragmentManager();
int count = fragmentManager.getBackStackEntryCount();
Log.v(TAG, "onBackStackChanged, count: " + count);
if (count == 0)
{
//we are at the top
***start working***
}
else
{
***stop working***
}
}