在我的fragment类中,我有条件地以编程方式将子视图元素添加到我的布局中:
LinearLayout child = (LinearLayout) inflater.inflate(R.layout.child_view, null);
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,100);
container.addView(child, params);
由于上面的代码将有条件地运行,所以,在某些时候,我想检查子视图是否已添加,如何以编程方式进行此检查?
我想你可以简单地使用
findViewById(your_view_id)
method:如果结果为null,则视图不存在,否则视图存在
如果您通过inflater创建视图,则可以检查其父级
if(view.getParent() != null) {...}
很抱歉迟到的回复,但您可以尝试这个替代方案:
在添加视图之前和添加视图之后使用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();
或者,如果您要查找视图实例,则可以:
if (container.indexOfChild(childView) == -1) {
// Add child to container.
}
我不能写评论所以我在这里写它作为一个解决方案:从API级别19你可以调用isAttachedToWindow()
,它没有多大帮助,但如果你的目标是API 19
或更高,那么这应该由文档工作。
也许你可以试试这个
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) {
}
});
使用AndroidX
,您可以使用ViewGroup.contains(view: View): Boolean
扩展功能。