2013-12-17 70 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

您可以覆盖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布尔值以查看它是添加(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在这种情况下不是解决方案,因为它总是返回可见) – FranBran

相关问题