我正在使用ViewPager
来显示2个片段作为选项卡。装入相应的活动后,将立即装入两个片段,而用户只能看到第一个片段。
因此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());
该解决方案的唯一缺点是,我必须以这种方式测试的每个Fragment中都必须实现这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()
该方法相反,确实考虑了“已加载但不可见”状态。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句