フラグメントクラスでは、条件付きでレイアウトに子ビュー要素をプログラムで追加します。
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の場合、ビューは存在しません。それ以外の場合、ビューは存在します
インフレータ経由でビューを作成する場合、彼の親を確認できます
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();
または、検索するviewインスタンスがある場合:
if (container.indexOfChild(childView) == -1) {
// Add child to container.
}
私はコメントを書くことができないので、解決策としてここに書きます:APIレベル19からisAttachedToWindow()
を呼び出すことができますが、あまり役に立たないのですが、_API 19
以上の場合、これはドキュメントで機能するはずです。
AndroidX
を使用すると、ViewGroup.contains(view: View): Boolean
拡張関数を使用できます。
たぶんあなたはこれを試すことができます
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) {
}
});