将更多数据加载到ListView - Android中

时间:2013-06-17 08:12:44

标签: java android android-listview android-asynctask

我已经实现了一个listview,其中数据通过asynctask加载,要加载更多数据,我使用了这个代码here(完全复制粘贴)

主要活动

class load_data extends AsyncTask<Integer, Void, Void>{

// This asynctask takes in a page number as argument and depending on that page number
// data is loaded and stored in various String[] arrays and their length is extended as     new items are loaded

protected void onPostExecute(Void result) {

if(adapter == null){
            adapter = new Listadapter(Main.this,String[],String[],String[]);
            list.setAdapter(adapter);

            }
            else if(adapter != null){

                adapter.notifyDataSetChanged();
            }

}
    }

此任务称为new load_data().execute(1);

在此代码之后,我从上面的链接加载了更多数据片段 在我的情况下,一切正常工作没有语法错误,并且在重新获得给定阈值(20)之后加载数据,但是没有显示新数据。如何通知适配器已添加更多数据或数据已更改 谢谢!

编辑:LOADMORE CLASS

class EndlessScrollListener implements OnScrollListener {

            private int visibleThreshold = 5;
            private int currentPage = 1;
            private int previousTotal = 0;
            private boolean loading = true;

            public EndlessScrollListener() {
            }

            public EndlessScrollListener(int visibleThreshold) {
                this.visibleThreshold = visibleThreshold;
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                if (loading) {
                    if (totalItemCount > previousTotal) {
                        loading = false;
                        previousTotal = totalItemCount;
                        currentPage++;
                    }
                }
                if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
                    // I load the next page of gigs using a background task,
                    // but you can call any function here.
                    new load_data().execute(currentPage);
                    adapter.notifyDataSetChanged();
                    loading = true;
                }
            }

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }
        }

list.setOnScrollListener(new EndlessScrollListener(20)); // 20 being the threshold

2 个答案:

答案 0 :(得分:2)

最后!对于那些遇到同样问题的人,我有解决方案。

我注意到如果您使用String []数组来存储显示在listview行中的数据,adapter.notifyDataSetChanged();不起作用。

相反,如果您使用List<String> list = new ArrayList<String>();并将数据存储在 列表视图将使用新数据进行更新:)

答案 1 :(得分:1)

如果您之前的代码有任何问题,可以查看此github project

否则,如果您要加载分页等数据,可以尝试this examplethis one