ListAdapterを使用してlistviewを更新した後、リストに最後まで入力された要素が表示されるように、リストが一番下までスクロールされていることを確認します。これどうやってするの ?
私はこれを試したが運が悪い:
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
ありがとうございました
リストデータがいつ変更されたかを知っていると仮定すると、リスト選択を最後の行に設定することによって、手動でリストを下にスクロールするように指示できます。何かのようなもの:
private void scrollMyListViewToBottom() {
myListView.post(new Runnable() {
@Override
public void run() {
// Select the last row so it will scroll into view...
myListView.setSelection(myListAdapter.getCount() - 1);
}
});
}
リストビューでこれらのパラメータを使用する必要があります。
lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
をスクロール
リストの先頭を一番下に設定しますlv.setStackFromBottom(true);
これらのパラメータをXMLで設定することもできます。このような:
<ListView
...
Android:transcriptMode="alwaysScroll"
Android:stackFromBottom="true" />
TRANSCRIPT_MODE_ALWAYS_SCROLLとsetSelectionの組み合わせは私のためにそれを動作させる
ChatAdapter adapter = new ChatAdapter(this);
ListView lv = (ListView) findViewById(R.id.chatList);
lv.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
lv.setAdapter(adapter);
adapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
lv.setSelection(adapter.getCount() - 1);
}
});
ボタンをクリックしたときにこれを使用することに成功したので、コンテンツを更新した後も使用できると思います。
myListView.smoothScrollToPosition(theListAdapter.getCount() -1);
使用方法:リストの先頭を一番下に設定します。lv.setStackFromBottom(true);
私のために働きました、そしてそれが最初に見えるようになったときにリストは自動的に一番下までスクロールされます。リストはTRANSCRIPT_MODE_ALWAYS_SCROLL
と同じようにスクロールします。
これをListFragmentで取得するには:
getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
getListView().setStackFromBottom(true);`
誰かがListFragmentと同じ問題をGoogleで検索した場合、彼はこれを見つけたので、この回答を追加しました。
よろしく
私が使う
setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);
チャットのトランスクリプトのように、一番下にエントリを追加し、古いエントリを一番上にスクロールします。
トランスクリプトモードはあなたが望むものであり、Google TalkとSMS/MMSアプリケーションによって使用されます。アイテムを追加するときに、アダプタ上でnotifyDatasetChanged()を正しく呼び出していますか?
最も簡単な解決策は、
listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
listView.setStackFromBottom(true);