Android 安卓&x2B;Robotium:用户是否可以看到ViewPager的视图

Android 安卓&x2B;Robotium:用户是否可以看到ViewPager的视图,android,robotium,android-testing,Android,Robotium,Android Testing,我正在使用ViewPager将两个片段显示为选项卡。一旦加载了相应的活动,两个片段将立即加载,而只有第一个片段对用户可见 因此,view.isShown()对于测试是不够的,因为该方法对于用户不可见的第二个片段返回true ViewAsserts.assertOnScreen(decorView,view)的行为方式似乎相同,因此对解决此问题毫无用处 我知道有人问过一些类似的问题,但他们的回答都不能满足我的需要。那么如何测试这种行为(使用Robotium) 解决方案: 根据Leon的建议,我在片

我正在使用
ViewPager
将两个片段显示为选项卡。一旦加载了相应的活动,两个片段将立即加载,而只有第一个片段对用户可见

因此,
view.isShown()
对于测试是不够的,因为该方法对于用户不可见的第二个片段返回true

ViewAsserts.assertOnScreen(decorView,view)
的行为方式似乎相同,因此对解决此问题毫无用处

我知道有人问过一些类似的问题,但他们的回答都不能满足我的需要。那么如何测试这种行为(使用Robotium)

解决方案:

根据Leon的建议,我在片段中使用了一个标志,如下所示:

private static boolean isVisibleToUser = false;

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

    MyFragment.isVisibleToUser = isVisibleToUser;
}

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

    if (isVisibleToUser) { 
         //Fragment is selected in ViewPager
         //Put your "on appear" validation/loading here
    }
}
将其作为静态方法实现我可以在测试中使用它:

assertTrue(MyFragment.isVisibleToUser());

这个解决方案的唯一缺点是,我必须在我想用这种方式测试的每个片段中实现这两个方法。。。有什么改进吗?

使用
OnPageChangedListener
检测更改并维护对当前可见片段/页面的引用


或者,
GetCurrentItem()
可能适用于您,如下所述:

您可以在片段中覆盖
setUserVisibleHint

private static boolean isVisibleToUser = false;

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

    MyFragment.isVisibleToUser = isVisibleToUser;
}

public static boolean isVisibleToUser() {
    return isVisibleToUser;
}
@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()
相反,此方法会考虑“已加载但不可见”状态。

是否有方法检查用户是否可以看到特定布局?(getVisibility在本例中不是一个解决方案,因为它总是返回可见的)听起来不错,但我如何在测试类中实际测试它呢?(使用robotium/ActivityInstrumentationTestCase2)我不熟悉robotium,因此我无法在这方面帮助您。但是,每次将片段添加到视图中/变得可见或从视图中移除/时,该方法都将激发。然后,您可以检查isVisibileToUser布尔值,查看它是被添加(true)还是被删除(false)。