检查android.view.View的所有权

时间:2013-07-24 11:20:55

标签: android android-layout android-fragments android-view

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

使用案例:View.OnClickListener为我提供了onClick(View view)中的观看次数。现在我几乎可以找到有关此视图对象的所有内容:它的类型(例如按钮),其资源ID,甚至XML文件中的资源名称都可以使用活动上下文来解析。但是,无法确定视图是否是片段的一部分,或者它是否直接位于活动内。

2 个答案:

答案 0 :(得分:2)

我可以想到两种方法:

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

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

    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()以查看该视图是否是其视图层次结构的一部分(尽管这些视图执行树搜索时可能会产生一个较慢的方法)。 e.g。

    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);
    }
    
  3. 虽然更多地考虑这一点,但您采用这些方法之一的事实表明,实现最终目标的方法可能更为简单。您在下落中设置了OnClickListener的视图?您是否可以在拥有视图的片段内设置侦听器,因此可以通过引用直接可用的片段来调用?

答案 1 :(得分:0)

你可以通过这个

获得它的父母
yourView.getParent()

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