2

プログラムである位置にスクロールしようとするメソッドがありListViewます。このメソッドにはいくつかの条件が含まれているため、アプリが実行されている Android SDK のバージョンによって実装が若干異なります。

この機能は、私がテストした 3 台の Android デバイスで正常に動作します。junitただし、とを使用して単体テストをRoboelectric作成し、スクロールによってターゲット位置のアイテムが表示されたかどうかを確認しました。テストは失敗します。デバッグするとandroid.os.Build.VERSION.SDK_INT、実行時に 0であることがRoboelectricわかります (つまり、デスクトップとデバイスまたはエミュレーターで)。

バージョンを無視して を使用しようとしましたListView.smoothScrollToPosition()が、 を呼び出した直後でも、getFirstVisilePoition()およびメソッドは 0 を返し続けます。getLastVisiblePosition()smoothScrollToPosition(150)

を使用してリストビューのスクロールをテストできるかどうか、またはその方法を知っている人はいますRoboelectricか?

ヘルプをいただければ幸いです-トピックに関する情報が見つからないようです。

ありがとう、

アナ

4

1 に答える 1

2

Robolectric 1.1 または 1.2 を使用している場合、AbsListView のソースは次のとおりです 。ジャワ

すべてのスクロール機能は 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 に答える