在使用listAdapter更新了列表视图之后,我希望确保列表一直滚动到底部,以便它显示列表中输入的最后一个元素。我该怎么做呢?

我试过了,但运气不好:

lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

谢谢你!


当前回答

组合使用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);    
    }
});

其他回答

组合使用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);    
    }
});

抄写模式是你想要的,谷歌Talk和SMS/MMS应用程序使用。当您添加项时,您是否正确地在适配器上调用notifyDatasetChanged() ?

最简单的解决方案是:

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

要在ListFragment中得到这个:

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

添加这个答案,因为如果有人做一个谷歌搜索相同的问题与ListFragment,他只是发现这个..

问候

我使用

setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL);

可以在底部添加条目,而较旧的条目可以滚动到顶部,就像聊天记录一样