簡體   English   中英

將更多數據加載到ListView-Android

[英]Load more data into ListView - Android

我實現了一個listview,其中通過asynctask加載了數據,要加載更多數據,我使用了此處找到的代碼(完全復制粘貼)

主要活動

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

最后! 對於那些遇到相同問題的人,我有解決方案。

我注意到那個adapter.notifyDataSetChanged(); 如果您使用String []數組存儲顯示在列表視圖行中的數據,則無法正常工作。

相反,如果您使用List<String> list = new ArrayList<String>(); 並在listview中存儲數據將使用新數據進行更新:)

如果您以前的代碼有任何問題,可以檢查此github項目

否則,如果要加載喜歡的拼版數據,你可以嘗試這個例子這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM