0

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) に達した後にデータがロードされますが、新しいデータは表示されません。データが追加されたこと、またはデータが変更されたことをアダプターに通知するにはどうすればよいですか。ありがとうございます。

編集:ロードモアクラス

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
4

2 に答える 2

2

ついに!同じ問題で立ち往生している人のために、解決策があります。

adapter.notifyDataSetChanged();リストビューの行に表示されるデータを格納するために String[] 配列を使用している場合、機能しないことに気付きました。

代わりに、リストビューでデータを使用List<String> list = new ArrayList<String>();して保存すると、新しいデータで更新されます:)

于 2013-06-17T08:44:17.497 に答える
1

以前のコードに問題がある場合は、このgithub プロジェクトを確認できます。

それ以外の場合は、ページネーションのようなデータをロードしたい場合は、この例これを試すことができます

于 2013-06-17T08:19:52.670 に答える