2

我有一种方法尝试以编程方式滚动到ListView. 该方法有一些条件,因此它的实现会根据应用程序运行的 Android SDK 版本而略有不同。

该功能在我测试过的 3 台 android 设备上运行良好。但是,我使用junitand编写了一个单元测试,Roboelectric它检查滚动是否使目标位置的项目可见。测试失败。当我调试时,我注意到android.os.Build.VERSION.SDK_INT在运行时为 0 Roboelectric(即在桌面上与设备或模拟器上)。

我尝试忽略版本而只使用ListView.smoothScrollToPosition(),但 getFirstVisilePoition()andgetLastVisiblePosition()方法继续返回 0,即使在我调用smoothScrollToPosition(150).

有谁知道是否/如何使用滚动列表视图进行测试Roboelectric

任何帮助将不胜感激 - 我似乎无法找到有关该主题的任何信息。

谢谢,

安娜

4

1 回答 1

2

如果您使用的是 robolectric 1.1 或 1.2,这里是 AbsListView 的来源: https://github.com/pivotal/robolectric/blob/master/src/main/java/com/xtremelabs/robolectric/shadows/ShadowAbsListView。爪哇

看起来所有滚动功能都是 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());
    }

}

您可以获得平滑的滚动位置。根据元素的高度,您可以确定哪些是可见的。

于 2013-02-16T21:32:35.220 回答