it-swarm.com.ru

Проверьте, добавлен ли элемент представления в макет или нет программно

В моем фрагментном классе я условно добавляю дочерний элемент представления к своему макету:

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

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

container.addView(child, params);

Поскольку приведенный выше код будет выполняться условно, поэтому в какой-то момент я хотел бы проверить, добавлено ли дочернее представление , как сделать эту проверку программно?

27
Mellon

Я думаю, что вы можете просто использовать 

findViewById(your_view_id) 

метод: если его результат равен нулю, представление не существует, в противном случае представление присутствует 

23
Apperside

Если вы создаете вид через inflater, вы можете проверить его родитель

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

Извините за поздний ответ, но вы можете попробовать эту альтернативу:

используйте 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();
20
imthegiga

Или, если вам нужно найти экземпляр view , вы можете:

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

Я не могу написать комментарий, поэтому я пишу его здесь как решение: С уровня API 19 вы можете вызвать isAttachedToWindow(), что не очень помогает, но если вы стремитесь к API 19 или выше, то это должно работать в документации.

5
ktamas

может ты сможешь попробовать это

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) {

        }
    });
0
kewei xia