在我的fragment类中,我以编程方式将子视图元素有条件地添加到我的布局中:
LinearLayout child = (LinearLayout) inflater.inflate(R.layout.child_view, null);
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,100);
container.addView(child, params);
由于上述代码将有条件地运行,因此,在某些时候,我想检查子视图是否已添加,如何以编程方式进行此检查?
答案 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
扩展功能。