1

1000 個のデータを含むリストビューがあります。一度に 10 個のアイテムのみを表示したいのですが、カーソルが最後の位置にある場合、次のスクロールではカーソルが最初の位置に移動し、次の 10 個のアイテムを表示する必要があります。私のリストビューはこのリンクに基づいており、私はhereを参照しましたが、私が望むものを達成できませんでした。これを達成するのを手伝ってください。前もって感謝します。

4

2 に答える 2

0

Base Adapter では、最初に i=10 を使用します。次に、この「i」を のgetCount()メソッドで使用しBaseAdapterます。

public int getCount() {
// TODO Auto-generated method stub
return i;
}

そして、「もっと見る」でButton、i をインクリメントしてから、アダプタを呼び出します。

元:

i=i+10;
adapter.notifyDataSetChanged();
于 2013-10-05T08:32:20.790 に答える
0

カーソルを使用しているため、制限クエリを使用できます。どこで現在の制限値を追跡できますか。

例を挙げます。最初に select * from table_name limit 0,10.. firstLimit = 0; があり、カウンター 10 が固定されているため、スクロール時に最後のアイテムが表示されているかどうかを判断し、それをカーソル カウントと比較して、firstLimit を 10 ずつ増やします。 、新しいクエリが select * from table_name where limit (firstLimit+10), 10 になるようにします。これにより新しいカーソルが返されるため、マージ カーソルを使用して最初のカーソルと新しいカーソルをマージし、呼び出す必要があります。アダプタで swapCursor を実行し、マージされたカーソルを渡します。

このシナリオでは、カーソルの保守のために、古いカーソル = mergedCursor. 新しいカーソルは、新しいクエリを持つものになります。

ただし、これにより、ある時点ですべてのアイテムがユーザーに表示されるという同じケースが発生します。

これを防ぐには、さらに読み込むオプションを使用して、一度に 10 件のレコードのみを表示することができます...常に。

-> 編集済み: ここに例を示します

必要なデータベース関連のファイルが稼働しているとします。およびカスタム カーソル アダプターを使用したリストビューの場合は、次のようにします。

lstView.setOnScrollListener(new OnScrollListener() {
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {}

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
        if (firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0) {
            start = end; end += 10; 
            cursorLoadMore = dbOperations.getData(YourActivity.this,start,end);
        }

        cursors = new Cursor[] {cursorLoadMore, cursor};
        MergeCursor mergeCursor = new MergeCursor(cursors);
        myListAdapter.swapCursor(mergeCursor);
        myListAdapter.notifyDataSetChanged();
        cursor = mergeCursor;
    }
});

スクロールすると、新しいレコードが表示されます。

于 2013-10-05T07:08:05.223 に答える