2014-03-26 3 views
0

Извините за мой английскийКак узнать, есть ли вид уже в макете?

Может быть метод View.isInLayout() делает то же самое, что я хочу, но он добавил в Android в API version 18, и я использую MIN VERSION == 9 в моем приложении.

Что я могу сделать?

На данный момент я использую следующий код, чтобы поймать момент, когда view будет размещен на макете, то есть, чтобы поймать момент, когда view будет иметь фактические размеры:

public static void runOnViewPlacedOnLayout(final Runnable runnable) { 
    ViewTreeObserver viewTreeObserver = view.getViewTreeObserver(); 
    viewTreeObserver.addOnGlobalLayoutListener(
      new ViewTreeObserver.OnGlobalLayoutListener() { 
       @Override 
       public void onGlobalLayout() { 
        removeOnGlobalLayoutListener(view, this); 
        runnable.run(); 
       } 
      } 
    ); 
} 


@SuppressWarnings("deprecation") 
private static void removeOnGlobalLayoutListener(View view, ViewTreeObserver.OnGlobalLayoutListener listener) { 
    ViewTreeObserver viewTreeObserver = view.getViewTreeObserver(); 
    if (viewTreeObserver == null) { 
     return; 
    } 
    if (Build.VERSION.SDK_INT < 16) { 
     viewTreeObserver.removeGlobalOnLayoutListener(listener); 
    } else { 
     viewTreeObserver.removeOnGlobalLayoutListener(listener); 
    } 
} 

Но в моем кодогенераторе view могут быть уже найдены на layout. В таком случае, что я могу сделать?

ответ

2

Чтобы знать, если вид добавляется в макет, вы

View view = layout.findViewById(int id);

или

View view = layout.findViewByTag(Object tag);

и ...

if(view != null) ... //view is already added

В зависимости о n ваши требования, вы либо затем вызываете layout.removeView (view), чтобы удалить представление, и добавить новое, либо обновить его или ничего не делать ... или все, что вам нужно :)

+4

или иначе, если 'view.getParent() 'возвращает непустой экземпляр, тогда' View' уже находится в макете ... –

+0

@GopalRao +1. Ваше решение эффективно, поскольку findViewById (id) выполняет поиск в иерархии представлений. – Pawan

Смежные вопросы