检查视图元素是否以编程方式添加到布局中

时间:2013-07-18 11:18:41

标签: android performance android-layout android-intent android-emulator

在我的fragment类中,我以编程方式将子视图元素有条件地添加到我的布局中:

LinearLayout child = (LinearLayout) inflater.inflate(R.layout.child_view, null);

LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,100);

container.addView(child, params);

由于上述代码将有条件地运行,因此,在某些时候,我想检查子视图是否已添加,如何以编程方式进行此检查?

7 个答案:

答案 0 :(得分:40)

如果您通过inflater创建视图,则可以检查其父级

if(view.getParent() != null) {...}

答案 1 :(得分:23)

我认为你可以简单地使用

findViewById(your_view_id) 

方法:如果结果为null,则视图不存在,否则视图存在

答案 2 :(得分:23)

很抱歉迟到的回复,但您可以尝试这个替代方案:

在添加视图之前和添加视图之后使用container.getChildCount();。喜欢:

int x = container.getChildCount();

container.addView(child, params);

int y = container.getChildCount();

if(y > x)
   Toast.makeText(context, "View Successfully Added!", Toas.LENGTH_SHORT).show();

答案 3 :(得分:9)

或者,如果要查找查看实例,您可以:

if (container.indexOfChild(childView) == -1) {
  // Add child to container.
}

答案 4 :(得分:5)

我不能写评论所以我在这里写一个解决方案: 从API级别19开始,您可以致电isAttachedToWindow()但这并不是很有帮助,但如果您的目标是API 19或更高,那么这应该可以通过文档进行操作。

答案 5 :(得分:0)

也许您可以尝试

child.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            child.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            // add to parent
        }
    });

或这个

child.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
        @Override
        public void onViewAttachedToWindow(View v) {

        }

        @Override
        public void onViewDetachedFromWindow(View v) {

        }
    });

答案 6 :(得分:0)

通过AndroidX,您可以使用ViewGroup.contains(view: View): Boolean扩展功能。