0

有没有办法检查某个视图(例如按钮等)是否属于一个片段?View.getContext()为我提供了活动,而片段没有自己的上下文。但是,我需要某种解决方法来确定按钮是否是片段的一部分并检索片段名称或类或其他任何内容。

用例:AView.OnClickListener为我提供了onClick(View view). 现在我可以找到关于这个视图对象的几乎所有内容:它的类型(例如按钮)、它的资源 id,甚至它来自 XML 文件的资源名称都可以使用活动上下文来解析。但是,无法确定视图是片段的一部分还是直接位于活动内部。

4

2 回答 2

2

我可以想到两种方法:

作为先决条件,您需要能够遍历屏幕上可见的片段列表(即,此视图可能是其子视图的候选者)。然后你可以:

  1. 反复调用View.getParent(),直到返回的视图是您正在检查的片段的根视图,或者您到达视图层次结构的顶部。例如

    boolean isViewPartOfFragment(View view, Fragment fragment) {
        View fragmentRootView = fragment.getView();
        while (view != null) {
            if (view == fragmentRootView) {
                return true;
            }
            view = (View) view.getParent();
        }
        return false;
    }
    
  2. 或者,对于每个片段,您可以调用findViewById()findViewByTag()在根视图上查看该视图是否是其视图层次结构的一部分(尽管这些执行树搜索可能会产生较慢的方法)。例如

    boolean isViewPartOfFragment2(View view, Fragment fragment) {
        Object tag = new Object();
        view.setTag(tag); // careful, will overwrite any existing tag!
        View foundView = fragment.getView().findViewByTag(tag);
        return (view == foundView);
    }
    

尽管对此进行了更多考虑,但您使用其中一种方法的事实表明,可能有一种更简单的方法可以实现您的最终目标。你在哪里设置视图OnClickListener?您是否可以在拥有视图的片段内设置侦听器,因此可以通过引用直接可用的片段来调用?

于 2013-07-24T12:43:31.053 回答
0

你可以通过这个得到它的父母

yourView.getParent()

http://developer.android.com/reference/android/view/View.html#getParent()

于 2013-07-24T11:33:55.827 回答