我有一种尝试以编程方式滚动到ListView
中某个位置的方法。该方法有一些条件,因此根据应用程序运行的Android SDK版本,它的实现略有不同。
该功能在我测试过的3款Android设备上运行良好。但是,我使用junit
和Roboelectric
编写了一个单元测试,用于检查滚动是否使目标位置的项目可见。测试失败。当我调试时,我注意到android.os.Build.VERSION.SDK_INT
与Roboelectric
一起运行时是{0}(即,在桌面上与设备或模拟器相比)。
我尝试忽略该版本并仅使用ListView.smoothScrollToPosition()
,但getFirstVisilePoition()
和getLastVisiblePosition()
方法继续返回0,即使在我调用smoothScrollToPosition(150)
之后也是如此。< / p>
是否有人知道是否/如何使用Roboelectric
滚动列表视图?
任何帮助将不胜感激 - 我似乎无法找到有关该主题的任何信息。
谢谢,
安娜
答案 0 :(得分:2)
如果你使用的是robolectric 1.1或1.2,这里是AbsListView的源代码: https://github.com/pivotal/robolectric/blob/master/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAbsListView.java
看起来所有滚动功能都是ShadowAdapterView: https://github.com/pivotal/robolectric/blob/master/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAdapterView.java
看起来不像getFirstVisiblePoition()
或getLastVisiblePosition()
。
我能够获得平滑的滚动位置。
@RunWith(RobolectricTestRunner.class)
public class SmoothScroll {
@Test
public void testSmoothScroll() {
Activity context = new Activity();
ListView view = new ListView(context);
view.smoothScrollToPosition(100);
Assert.assertEquals(100, Robolectric.shadowOf(view).getSmoothScrolledPosition());
}
}
您可以获得平滑的滚动位置。根据元素的高度,您可以找出哪些是可见的。