1

私はこれを検索し、多くのことを試しましたが、時々解決したように見えましたが、そうではありませんでした

これは私のアプリケーションの動作です:

1. AsyncTask で Web サーバーからフェッチされ、ArrayList に格納された最初の 10 個のアイテムを含む ListView。

2. この ArrayList を Adapter に設定します

3. onScroll、最後のアイテムに到達した場合、さらに 10 個のアイテムをフェッチし、ArrayList に追加するなど

問題:

すべてのアイテムに感謝するボタンがあり、ArrayList の特定のアイテムのデータから初期カウントが取得されます。

10にしましょう

これはアクション アイテムであるため、アダプタの getView ()にこのボタンのonClickListenerがありました。

onClick(){

//change the count to count+1 or change 10 to 11
}

これは機能しますが、リストをスクロールすると、このカウントはcount + 1 (11)を保持する代わりにcount (10)に戻されます。これは、アイテムが再作成されており、カウントを取得するために使用されているデータが古い 1 (10) である ArrayList からのものであるためです。これを機能させるには、サーバーのデータを更新し、それを取得して ArrayList に格納し、それを使用してcount + 1 (11)を取得する必要があります。

これを行う方法はありますか。アクションアイテムがクリックされるたびに新しいデータを提供するためにサーバーを呼び出すことができないためです。これは、ListView が再作成され、スクロールされたすべてのアイテムが失われるようなものになるためです。

ありがとうございました

4

2 に答える 2

0

フォーカスされている場合は、選択されていることを意味します(キーボードで下にスクロールし、その周りに選択長方形があります)。次に、を使用しますsetOnItemSelectedListener。int引数は位置であり、それをリスト内のアイテムの数と比較すると、黄金色になります。

焦点を合わせることで目に見えることを意味する場合は、setOnScrollListener次のメソッドを持つを使用します。

onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)

最初に+表示すると、最後に表示されたアイテムが表示され、合計と比較できます。次に、残りのアイテムでアダプタを書き込み更新します。

于 2012-11-01T11:37:44.797 に答える
0

スクロールでより多くのデータをロードしたい場合は、これを試してください

最初に実装するOnScrollListener

オーバーライドを実装する

@Override
    public void onScroll(AbsListView view,
            int firstVisible, int visibleCount, int totalCount) {

        boolean loadMore = firstVisible + visibleCount >= totalCount;

            if(loadMore) {
                Remainingdata=totaldata-(firstVisible + visibleCount);
                System.out.println(totaldata);
                System.out.println(visibleCount);
                System.out.println(Remainingdata);
                if(Remainingdata<visibleCount){
                    yourlist.count += Remainingdata; // or any other amount
                }else{
                    yourlist.count += visibleCount; // or any other amount
                }
                yourlist.notifyDataSetChanged();
            }
    }


    @Override
     public void onScrollStateChanged(AbsListView v, int s) { } 
于 2012-11-01T12:04:20.257 に答える