1000 個のデータを含むリストビューがあります。一度に 10 個のアイテムのみを表示したいのですが、カーソルが最後の位置にある場合、次のスクロールではカーソルが最初の位置に移動し、次の 10 個のアイテムを表示する必要があります。私のリストビューはこのリンクに基づいており、私はhereを参照しましたが、私が望むものを達成できませんでした。これを達成するのを手伝ってください。前もって感謝します。
2 に答える
Base Adapter では、最初に i=10 を使用します。次に、この「i」を のgetCount()
メソッドで使用しBaseAdapter
ます。
public int getCount() {
// TODO Auto-generated method stub
return i;
}
そして、「もっと見る」でButton
、i をインクリメントしてから、アダプタを呼び出します。
元:
i=i+10;
adapter.notifyDataSetChanged();
カーソルを使用しているため、制限クエリを使用できます。どこで現在の制限値を追跡できますか。
例を挙げます。最初に 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;
}
});
スクロールすると、新しいレコードが表示されます。