0

アプリに最初に 10 個のアイテムを表示するリスト ビューがあり、一番下までスクロールすると、毎回 10 個のアイテムが動的に追加されます。私の問題は、一番下までスクロールすると、リストの最初の項目 (新しく追加された 10 項目ではなく) に表示されるため、一番下までスクロールする必要があることです。

使った

ListView.setSelection(totalItemCount - 9);

新しく追加された 10 アイテムの最初のアイテムを表示します。しかし、ここで何が起こるかというと、実際にはリストビューの最初の項目に表示が移動しますが、再び、新しく追加された 10 項目の最初の項目に自動的にスクロールします。だから、ここでuxが悪くなります....リストビューの一番上に行かないように変更したいです。私はそれを明確に説明したいと思います, 助けてください, ありがとう

4

3 に答える 3

1

下にスクロールして新しいデータの取得を開始するときは、次の方法を使用して、最後の可視位置をいくつかの変数に保存する必要があります。

int firstVisiblePosition = listView.getFirstVisiblePosition();

編集 これを試してください:

View view = listView.getChildAt(0);
int distFromTop = (view == null) ? 0 : view.getTop();

次に、データの読み込みが完了したら、次を使用してこの位置を設定する必要があります。

listView.setSelectionFromTop(firstVisiblePosition, distFromTop);
于 2012-05-16T05:54:42.203 に答える
0

リストビューの onSizeChanged(...) メソッドをオーバーライドしたいかもしれません。

それが一番上に移動したと思います。

次のようなことを試してください:

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
setSelection(getCount()-9);
于 2012-05-16T05:51:16.340 に答える
0

選択を手動で設定することは、ユーザー エクスペリエンスとしては良いとは思いません (リストの一番上の項目が表示される可能性があるため)。

リストに追加する新しい項目セットを動的に取得したら、addAll() メソッドを呼び出すだけで、notifyDatasetChanged() を使用してコンテンツを更新する必要があることをアダプタに通知できます。リストビューは、更新時に現在の位置を記憶するのが賢明です。

于 2012-05-16T05:54:04.013 に答える