【问题标题】:How to make listview scroll move on to new data added in android如何使listview滚动移动到android中添加的新数据
【发布时间】:2016-09-14 17:13:28
【问题描述】:

我正在开发一个应用程序,在该应用程序中我发送服务器请求并作为响应服务器向我发送数据,然后将其添加到列表视图中,场景类似于最初 5 个数据对用户可见,当我滚动到列表视图应用程序末尾时发送服务器请求和响应服务器向我发送 5 个我想要的数据列表视图滚动到添加到列表视图中的新数据。为此,我已经用户 listview.setSelection(listview.getCount() - 1);但这会将列表视图滚动到数据的末尾。

【问题讨论】:

  • 那么问题是,这些数据是附加到末尾还是中间某处?如果它被附加到末尾,您应该将其更改为 listview.scrollToPosition(listview.getCount() - 6);(因为您希望最后 5 个可见。)

标签: android


【解决方案1】:

Listview 有滚动到位置的方法:

listView.smoothScrollToPosition(YOUR_POSITION);

在发出请求之前保存您的项目数,然后滚动到该位置+1。

【讨论】:

    【解决方案2】:
    listView.post(new Runnable() {
                                @Override
                                public void run() {
                                    listView.setSelection(listView.getCount() - (no. of new items added  + 1));
                                }
                            });
    

    【讨论】:

    • 这会将列表视图滚动移动到数据的末尾,但我希望如果添加 5 个新数据,那么列表视图滚动必须位于添加的 5 个数据中的第一个
    • 然后代替listView.getCount() - 1listView.getCount() - (no. of new items added + 1)
    • 假设 listview 中最初有 5 个数据并添加了 5 个数据,然后我希望 listview 滚动移动到第 6 个索引....就像下次数据增加时假设再添加 3 个数据然后listview 滚动必须在 11 日......
    【解决方案3】:

    这取决于您如何在 listView 中添加数据。我假设您在适配器中为此使用了一些类似的方法。

    List<POJO> items;
    void addData(List<POJO> data)
    {
      for(POJO p: data){
        items.add(p);
      }
       notifyDataSetChanged();
    istView.post(new Runnable() {
                                @Override
                                public void run() {
                                    listView.setSelection(items.size()-data.size());
                                }
                        });
    
    
    }
    

    【讨论】:

      【解决方案4】:

      但是,您收到来自服务器的响应,将该项目添加到您要添加到适配器的 ArrayList。将项目添加到 ArrayList 后,将其大小 - 1 保存到整数变量并调用 notifyDataSetChanged。现在,每当您收到新的响应然后将您的列表视图滚动到存储的变量位置 + 1 时,它将在您想要的确切位置获得滚动点。

      注意:如果您没有得到任何响应,请不要滚动到位置 + 1,它会给您带来问题。

      例如

      //By default
      int scrollToPosition = 0; 
      

      //webservice响应数据添加到你的数组列表后。

      notifyDataSetChanged();
      listview.setSelection(scrollToPosition+1);//For direct scroll or
      listview.smoothScrollToPosition(scrollToPosition+1);//For smooth scroll
      scrollToPosition = list.size() - 1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-19
        • 1970-01-01
        相关资源
        最近更新 更多