Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
到达列表末尾时在Android listview中自动加载数据_Android_Android Listview - Fatal编程技术网

到达列表末尾时在Android listview中自动加载数据

到达列表末尾时在Android listview中自动加载数据,android,android-listview,Android,Android Listview,我需要实现自定义listview,将从网站获取数据。当到达列表末尾时,将进行新的api调用。我不介意它在后台不断获取新数据,并在到达列表末尾时显示 最好的方法是什么 现在我已经创建了一个滚动视图。我调用api获取10条记录,并从中创建一个linearlayout,然后将其添加到scrollview。我听scrolls,当它结束时,进行一个新的api调用,并再次将其添加到scrollview。但它的性能并不好,而且有时会结冰 有没有更好的方法来实现这一点?我昨晚刚刚写了一篇博客。它应该完全按照您的

我需要实现自定义listview,将从网站获取数据。当到达列表末尾时,将进行新的api调用。我不介意它在后台不断获取新数据,并在到达列表末尾时显示

最好的方法是什么

现在我已经创建了一个滚动视图。我调用api获取10条记录,并从中创建一个linearlayout,然后将其添加到scrollview。我听scrolls,当它结束时,进行一个新的api调用,并再次将其添加到scrollview。但它的性能并不好,而且有时会结冰


有没有更好的方法来实现这一点?

我昨晚刚刚写了一篇博客。它应该完全按照您的要求执行:。如果您需要任何澄清,请告诉我


该示例在加载数据集一半的视图时开始加载下一个数据集。这样,如果用户缓慢滚动,他们可能永远看不到列表的“结尾”。如果这是一项要求,您可以对其进行更改,使其等待到结束

我建议检查滚动,而不是使用适配器,因为您可以处理任意数量的项目(甚至0),还可以根据adapterView显示的内容定制何时进行额外加载

下面是一个示例代码:

mAdapterView.setOnScrollListener(new OnScrollListener() 
  {
  ...
  @Override
  public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 
    {
    final boolean needLoading =!mIsLoadingNewData&& firstVisibleItem + visibleItemCount >= mAdapter.getCount() - 1;
    mIsLoadingNewData=true;
    if(needLoading)
      //load the new data and then update the adapter with new data and then set mIsLoadingNewData to false
  }

它是scroll listener的一个实现,它存储参数,以防您需要实现分页查询,每次滚动到达底部时查找不同的十位数

    private class ScrollListener implements AbsListView.OnScrollListener {

    private int currentScrollState;
    private int totalItemCount;
    private int currentVisibleItemCount;
    private boolean loading;
    private int pageSize = 10;
    private int offset = 0;

    public void setLoading(boolean loading) {
        this.loading = loading;
    }

    public int getPageSize() {
        return this.pageSize;
    }

    public int getOffset() {
        return this.offset;
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        this.currentScrollState = scrollState;
        this.isScrollCompleted();
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        this.currentVisibleItemCount = firstVisibleItem + visibleItemCount; // last item
        this.totalItemCount = totalItemCount;
    }

    private void isScrollCompleted() {
        if (this.currentVisibleItemCount > 0
                && this.totalItemCount - 1 == this.currentVisibleItemCount
                && this.currentScrollState == SCROLL_STATE_IDLE) {
            // Detect if there's been a scroll which has completed and load more
            if (!loading && preguntas.getAdapter() != null) {
                loading = true;
                offset += pageSize;
                loadMoreData(offset, pageSize);
            }
        }
    }
}

嘿,谢谢你的回复,我还没有机会继续这件事,我会很快尝试,并会让你知道