-1

私のプロジェクトで問題があるのは、次のことです。

-1000 を超えるアイテムを含む listView があります。listView で一度に 1000 個のアイテムすべてをロードしたくありません。画面に10個のアイテムを表示し、リストの一番下に「その他」を表示したいだけです。「もっと見る」をクリックすると、listView にさらに 10 個のアイテムが追加され、listView には 20 個のアイテムが追加されます。また、スクロール可能で、リストに1000個のアイテムがすべて含まれるまで、「その他」ボタンはそのままです。

誰か提案やコード例がありますか?

事前に感謝します。

4

3 に答える 3

3

まず第一に、1000 個のアイテムすべてをロードしたくない理由が、1000 個のビューが含まれているために UI が「重くなる」と考えている場合は、間違っています。リストビューには、表示されると思われるアイテムのみをメモリに保持するメカニズムがあります。リスト アダプターの getView() メソッドの実装が convert ビュー パラメーターを適切に再利用している場合に最適に機能します。

それが理由ではない場合 - すべてのモジュール 10 の位置で戻るようにアダプターを実装することで達成できます - ロジック データに項目を追加する onClick リスナーを実装するボタン、次に notifyDataSetChanged() を呼び出して UI を適切に更新する新しいデータ

于 2012-05-29T07:38:27.877 に答える
0

Web サービスを使用している場合。アイテムの量を指定するストアド プロシージャを作成してみてください。ボタンを押すたびに。ストアド プロシージャは以前のデータ + 10 個のデータ項目を取得しますか? それは多分オプションです

于 2012-05-29T08:12:01.553 に答える
0

1時間の調査の後、私の問題を解決しました:

setOnScrollListener- ListView の lastIndex を取得するために実装します

- lastIndexを使用して 10 個のアイテムを追加してデータを更新するスレッドを作成しadapterます。

ここに説明があります

 gtumcaDynamicListView.setOnScrollListener(new OnScrollListener() {

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        // what is the bottom iten that is visible
        int lastInScreen = firstVisibleItem + visibleItemCount;
        if((lastInScreen == totalItemCount) && !(loadingMore)) {
            //Run background thread
            Thread tt = new loadBackgroung(lastInScreen, adaptor);
            tt.start();
        }
    }
});


class loadBackgroung extends Thread{
public int lastIndex;
public MyCustomAdaptor adaptor;


public loadBackgroung(int lastIndex, MyCustomAdaptor adaptor) {
    super();
    this.lastIndex = lastIndex;
    this.adaptor = adaptor;
}

@Override
public void run() {


    handler.post(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            for(int i = 0;i<10;i++){
                gtuMcaBean.add(new GtuMcaBean((lastIndex + i)+" First", (lastIndex + i)+" Last", (lastIndex + i)+" Birthdate"));
            }
            adaptor.notifyDataSetChanged();
        }
    });
    loadingMore = false;

}

完全なコード: http://code.google.com/p/dynamic-listview/source/checkout

于 2012-05-29T09:38:35.790 に答える