如何使listview的最后一项位于顶部

时间:2013-11-06 15:00:50

标签: android listview android-listview

我有一个包含大量不同尺寸项目的列表视图

我有一个按钮可以滚动到列表视图中的某个项目

但是,当此项目为最后一个时,列表视图当然会在此项目可见时停止

但是我希望listview以这样的方式向上滚动:最后一项是屏幕上唯一可见的项目 - 列表底部是空白

我该怎么做?

我的滚动方法:

    public void scrollTo(int newPosition) {

    lv.smoothScrollToPositionFromTop(newPosition+ 1, 0, 500);

    handler.postDelayed(new Runnable() {

        @Override
        public void run() {
            //this is needed in order for the item to be at the top
                     //because the listview stops, if scrolling from top down, and stops 
                     //once item becomes visible
            lv.smoothScrollToPositionFromTop(newPoisition+ 1, 0, 0);
        }
    }, 501);

}

这是手动添加虚拟物品的崩溃报告

enter image description here

1 个答案:

答案 0 :(得分:0)

嗯,您可以通过以下方式执行此操作:

  • 检测列表视图的结尾。
  • 当列表视图到达结尾时,保留列表中的最后一个(用于填充列表的数组列表)并删除所有其他列表并刷新列表。如果您不想删除它们,只需复制到另一个阵列列表并复制这些项目(如果用户需要再次向上移动)。

要检测列表视图的结尾,您可以使用以下类:

  public final class GVOnScrollListener implements AbsListView.OnScrollListener {
       public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {

            if (loading) {
                if (totalItemCount > previousTotal) {
                    loading = false;
                    previousTotal = totalItemCount;
                    offset++;
                }
            }

            if  (!loading && totalItemCount == (firstVisibleItem + visibleItemCount) && (productCount > totalItemCount)) {
                productListServiceRequest();
                businessResultListView.setSelection(firstVisibleItem);
                loading = true;
                  new Handler().postDelayed(new Runnable() {
                      public void run() {

                     readyToRequest = true;         

                      }
              }, 2000);

                  readyToRequest = false;

            }

       }

    public void onScrollStateChanged(AbsListView view, int scrollState) {

    }

  }

并将其设置为列表视图,如:

listview.setAdapter(businessPromotionListAdapter);

通过上述课程,您可以看到:

  • 您可以在屏幕上看到的项目数。
  • 您向上滚动的项目数。
  • 列表中的项目总数。