我正在使用ViewPager
将2个片段显示为标签。加载相应的活动后,立即加载两个片段,而只有第一个片段对用户可见。
因此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;
}
将其作为 static 方法实现我可以通过这种方式在我的测试中使用它:
assertTrue(MyFragment.isVisibleToUser());
这个解决方案的唯一缺点是我必须在每个片段中实现这两个方法我想以这种方式进行测试......任何改进?
答案 0 :(得分: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()
相反,此方法会考虑“已加载但不可见”的状态。
答案 1 :(得分: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?