0

アダプタを使用してアセット ファイルからデータをレンダリングする ListView を使用しています。リストが自動スクロールすると、 ListView の一番下の子が表示されません。しかし、画面に触れると、目に見えない子供が見えるようになります。自動スクロールモードで表示したい。ここにコードがあります

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    list = (ListView) findViewById(R.id.list);
    loadUrduFileInList();
    adapter = new LessonListAdapter(this, R.layout.lesson_list_item, urduDataList);
    list.setAdapter(adapter);
    list.setOnScrollListener(this);
    verticalScrollMax = getListViewHeight(list);
    verticalScrollMax = verticalScrollMax - 921;
    ViewTreeObserver vto = list.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
    {
        @Override
        public void onGlobalLayout()
        {
            list.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            verticalScrollMax = getListViewHeight(list);
            verticalScrollMax = verticalScrollMax - 921;
            startAutoScrolling();
        }
    });
}

public void startAutoScrolling()
{
    if (scrollTimer == null)
    {
        scrollTimer = new Timer();
        final Runnable Timer_Tick = new Runnable()
        {
            public void run()
            {
                moveScrollView();
            }
        };

        if (scrollerSchedule != null)
        {
            scrollerSchedule.cancel();
            scrollerSchedule = null;
        }
        scrollerSchedule = new TimerTask()
        {
            @Override
            public void run()
            {
                runOnUiThread(Timer_Tick);
            }
        };

        scrollTimer.schedule(scrollerSchedule, 20, 20);
    }
}
public void moveScrollView()
{
    scrollPos = (int) (list.getScrollY() + 1.0);
    if (scrollPos >= verticalScrollMax)
    {
        scrollPos = 0;
    }
    list.scrollTo(0, scrollPos);
}
4

1 に答える 1

0

アダプターを効果的に実装することをお勧めします。したがって、このコードはリストビューをスクロールするだけです

変数の別の値を試す必要があります

final long totalScrollTime = Long.MAX_VALUE; //total scroll time. I think that 300 000 000 years is close enouth to infinity. if not enought you can restart timer in onFinish()

final int scrollPeriod = 20; // every 20 ms scoll will happened. smaller values for smoother

final int heightToScroll = 20; // will be scrolled to 20 px every time. smaller values for smoother scrolling

listView.post(new Runnable() {
                        @Override
                        public void run() {
                                new CountDownTimer(totalScrollTime, scrollPeriod ) {
                                    public void onTick(long millisUntilFinished) {
                                        listView.scrollBy(0, heightToScroll);
                                    }

                                public void onFinish() {
                                    //you can add code for restarting timer here
                                }
                            }.start();
                        }
                    });
于 2013-08-24T09:49:24.817 に答える