【问题标题】:How to make the last item of the listview be at the top如何使列表视图的最后一项位于顶部
【发布时间】:2013-11-17 21:18:21
【问题描述】:

我有一个列表视图,里面有一堆不同大小的项目

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

但是,当这个项目是最后一个时,当这个项目变得可见时,列表视图当然会停止

但我希望列表视图向上滚动,最后一项是屏幕上唯一可见的项目 - 并且列表底部是空白的

我该怎么做?

我的滚动方法:

    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);

}

这是手动添加虚拟项目的崩溃报告

【问题讨论】:

  • 到目前为止你尝试了什么?你可以发布你的代码吗
  • 我刚刚创建了一个普通的列表视图,带有一个普通的基础适配器,它使用 arrayList 来显示其项目
  • 我想添加一个虚拟的非常高的项目,但这不会起作用,因为我的项目以某种方式放置,并且列表视图在找到虚拟项目时崩溃
  • @JackKFouani 添加了我的滚动方法
  • 我看到的唯一解决方案是添加一个虚拟项目。它应该工作。如果您的应用程序崩溃..您做错了什么。您能否发布一下您的应用在添加虚拟项目时崩溃的方式和位置?

标签: android listview android-listview


【解决方案1】:

好吧,你可以通过以下方式做到这一点:

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

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

  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);

通过上面的类,可以看到:

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

【讨论】:

  • 我不想在列表中添加新项目 - > 我想要它,所以当列表到达末尾时,我可以滚动更多,直到最后一个项目位于屏幕顶部
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
  • 1970-01-01
  • 2020-02-13
  • 2012-06-12
  • 1970-01-01
  • 2017-08-17
相关资源
最近更新 更多