34

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

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

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

container.addView(child, params);

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

4

7 回答 7

51

如果您通过充气机创建视图,您可以检查他的父母

if(view.getParent() != null) {...}
于 2013-07-18T11:32:35.107 回答
29

我想你可以简单地使用

findViewById(your_view_id) 

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

于 2013-07-18T11:22:21.773 回答
25

抱歉回复晚了,但你可以试试这个替代方案:

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();
于 2013-08-07T05:54:11.033 回答
14

或者,如果您有要查找的视图实例,您可以:

if (container.indexOfChild(childView) == -1) {
  // Add child to container.
}
于 2018-03-06T12:30:23.640 回答
6

我不能写评论,所以我把它写在这里作为一个解决方案:从 API 级别 19 你可以调用isAttachedToWindow()这并没有多大帮助,但如果你的目标是API 19或更高,那么这应该由文档工作。

于 2016-11-29T12:23:05.223 回答
4

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

于 2019-03-26T20:42:20.683 回答
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) {

        }
    });
于 2018-08-19T21:29:13.877 回答