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

我试过了,但运气不好:

lv.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);

谢谢你!


当前回答

我已经成功地使用这个响应按钮点击,所以我猜你也可以在更新内容后使用它:

myListView.smoothScrollToPosition(theListAdapter.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);    
    }
});

假设您知道列表数据何时发生了变化,您可以通过将列表选择设置为最后一行来手动告诉列表滚动到底部。喜欢的东西:

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.setStackFromBottom(true);

为我工作,列表是自动滚动到底部,当它第一次进入可见性。然后,该列表会像使用TRANSCRIPT_MODE_ALWAYS_SCROLL时那样滚动。

你需要在列表视图中使用这些参数:

滚动 lv.setTranscriptMode (ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 将列表的头与底对齐 lv.setStackFromBottom(真正的);

您还可以用XML设置这些参数,例如。是这样的:

<ListView
   ...
   android:transcriptMode="alwaysScroll"
   android:stackFromBottom="true" />

我已经成功地使用这个响应按钮点击,所以我猜你也可以在更新内容后使用它:

myListView.smoothScrollToPosition(theListAdapter.getCount() -1);