如果视图被覆盖/遮挡,我怎样才能识别片段?

时间:2014-07-03 16:50:09

标签: android android-activity android-fragments

我在应用程序中使用导航抽屉模式。

我的一个片段做了一些我希望在导航抽屉打开时停止的工作。

同一个片段也可以生成一个对话框(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***
    }
}

0 个答案:

没有答案