web-dev-qa-db-ja.com

リストを更新した後、リストの最後までスクロールします

ListAdapterを使用してlistviewを更新した後、リストに最後まで入力された要素が表示されるように、リストが一番下までスクロールされていることを確認します。これどうやってするの ?

私はこれを試したが運が悪い:

lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

ありがとうございました

282
jramirez

リストデータがいつ変更されたかを知っていると仮定すると、リスト選択を最後の行に設定することによって、手動でリストを下にスクロールするように指示できます。何かのようなもの:

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);
        }
    });
}
405
Mason Lee

リストビューでこれらのパラメータを使用する必要があります。

  • lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);をスクロール

  • リストの先頭を一番下に設定しますlv.setStackFromBottom(true);

これらのパラメータをXMLで設定することもできます。このような:

<ListView
   ...
   Android:transcriptMode="alwaysScroll"
   Android:stackFromBottom="true" />
232
dev.serghini

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);    
    }
});
36
Wärting

ボタンをクリックしたときにこれを使用することに成功したので、コンテンツを更新した後も使用できると思います。

myListView.smoothScrollToPosition(theListAdapter.getCount() -1);
27
Álex

使用方法:リストの先頭を一番下に設定します。lv.setStackFromBottom(true);

私のために働きました、そしてそれが最初に見えるようになったときにリストは自動的に一番下までスクロールされます。リストはTRANSCRIPT_MODE_ALWAYS_SCROLLと同じようにスクロールします。

9
Kevin Parker

これをListFragmentで取得するには:

getListView().setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
getListView().setStackFromBottom(true);`

誰かがListFragmentと同じ問題をGoogleで検索した場合、彼はこれを見つけたので、この回答を追加しました。

よろしく

9
Klatschen

私が使う

setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);

チャットのトランスクリプトのように、一番下にエントリを追加し、古いエントリを一番上にスクロールします。

6
Plugie

トランスクリプトモードはあなたが望むものであり、Google TalkとSMS/MMSアプリケーションによって使用されます。アイテムを追加するときに、アダプタ上でnotifyDatasetChanged()を正しく呼び出していますか?

3
Romain Guy

最も簡単な解決策は、

    listView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
    listView.setStackFromBottom(true);
2
ucMedia