Check if view element is added to layout or not programmatically

≯℡__Kan透↙ 提交于 2019-12-18 18:36:54

问题


In my fragment class, I add a child view element programmatically to my layout conditionally :

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

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

container.addView(child, params);

Since the above code will be run conditionally, so, at some point, I would like to check if the child view has added or not, how to make this checking programmatically?


回答1:


I think you can simply use

findViewById(your_view_id) 

method: If its result is null the view does not exists, otherwise the view is present




回答2:


If you creating view via inflater, you can check his parent

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



回答3:


Sorry for late reply but you may try this alternative:

use container.getChildCount(); before adding and after adding a view. Like :

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();



回答4:


Or if you have a view instance to find, you could:

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



回答5:


I cannot write a comment so I write it here as a solution: From API level 19 you can call isAttachedToWindow() which doesn't help a lot, but if you are aiming API 19 or higher, then this should work by the documentation.




回答6:


With AndroidX you can use ViewGroup.contains(view: View): Boolean extension function.




回答7:


maybe you can try this

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

or this one

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

        }

        @Override
        public void onViewDetachedFromWindow(View v) {

        }
    });


来源:https://stackoverflow.com/questions/17721991/check-if-view-element-is-added-to-layout-or-not-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!