2013-12-17 5 views
2

Я использую ViewPager для отображения 2 фрагментов в качестве вкладок. Как только соответствующая активность загружена, оба фрагмента загружаются сразу, а пользователю видна только первая.Android + Robotium: вид ViewPager, видимый пользователю

Поэтому view.isShown() не является достаточным для тестирования, так как этот метод возвращает true для второго фрагмента, который не отображается пользователю.

ViewAsserts.assertOnScreen(decorView, view), похоже, ведет себя одинаково и поэтому бесполезен для решения этой проблемы.

Я знаю, что некоторые подобные вопросы были заданы, но ни один из их ответов не удовлетворяет мои потребности. Итак, как проверить это поведение (используя Robotium)?

Решение:

Я решил его в соответствии с предложением Леона с помощью флага в пределах фрагмента, как это:

private static boolean isVisibleToUser = false; 

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 

    MyFragment.isVisibleToUser = isVisibleToUser; 
} 

public static boolean isVisibleToUser() { 
    return isVisibleToUser; 
} 

реализующего его как статический метод, который я могу использовать его в моем испытайте этот путь:

assertTrue(MyFragment.isVisibleToUser()); 

Единственный недостаток этого soluti что я должен реализовать эти 2 метода в каждом отдельном фрагменте, который я хочу проверить таким образом ... любые улучшения?

ответ

2

Вы можете переопределить setUserVisibleHint внутри фрагмента, как это:

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 

    if (isVisibleToUser) { 
     //Fragment is selected in ViewPager 
     //Put your "on appear" validation/loading here 
    } 
} 

Этот метод будет срабатывать каждый раз, когда вы показываете или скрыть фрагмент в ViewPager.

В отличие от view.isShown() этот метод учитывает «загруженное, но не видимое» состояние.

+0

звучит хорошо, но как я мог на самом деле ** проверить ** его в тестовом классе? (с использованием robotium/ActivityInstrumentationTestCase2) – FranBran

+0

Я не являюсь familliar с Robotium, поэтому я не могу вам помочь. Однако метод будет срабатывать каждый раз, когда фрагмент добавляется в/становится видимым или уходит/удаляется из представления. Затем вы можете проверить isVisibileToUser boolean, чтобы узнать, добавлено ли оно (true) или удалено (false). –

1

использовать OnPageChangedListener для обнаружения изменений и поддержания ссылки на видимый в данный момент фрагмент/страницу.

http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html

В качестве альтернативы GetCurrentItem() может работать для вас, как описано здесь: How do you get the current page number of a ViewPager for Android?

+0

Есть ли способ проверить, есть ли конкретный макет, видимый пользователю? (getVisibility не является решением в этом случае, поскольку он всегда будет возвращать VISIBLE) – FranBran

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