Android有transcript mode允许在将新数据添加到适配器时自动将列表视图滚动到底部。
这可以以某种方式反转,以便在列表顶部自动添加新项目(“逆转录模式”)
方法stackFromBottom似乎是正确的,但不会在输入更改时自动滚动。
有没有人有一些示例代码,其中列表不断添加始终插入顶部的内容?我在这里走在正确的轨道上吗?
更新
感谢您的回答,这让我想得更多。其实。我想让新条目显示在顶部,但屏幕仍然显示用户正在查看的项目。用户应主动滚动到顶部以查看新项目。所以我认为成绩单模式不是我想要的。
答案 0 :(得分:45)
List items = new ArrayList();
//some fictitious objectList where we're populating data
for(Object obj : objectList) {
items.add(0, obj);
listAdapter.notifyDataSetChanged();
}
listView.post(new Runnable() {
@Override
public void run() {
listView.smoothScrollToPosition(0);
}
}
我不确定这会起作用,但似乎合乎逻辑。基本上,只需确保在列表的开头添加项目(位置0),刷新列表适配器,然后滚动到位置(0,0)。
答案 1 :(得分:9)
而不是:
items.add(edittext.getText().toString());
adapter.notifyDataSetChanged();
你应该尝试(适合我):
listview.post(new Runnable() {
@Override
public void run() {
items.add(0, edittext.getText().toString());
adapter.notifyDataSetChanged();
listview.smoothScrollToPosition(0);
}
});
答案 2 :(得分:7)
只要添加一个smoothScrollToPosition(0)
,只要将东西添加到ListView中就不够了吗?不要以为有自动滚动选项。
答案 3 :(得分:7)
我花了几个小时试图完成同样的事情。从本质上讲,这就像一个聊天应用程序,用户向上滚动以查看列表顶部的旧消息。
问题在于,您想要动态添加另外50或100 记录到顶部但滚动应该从哪里连续 添加了前置项目。
当您执行notifyDataSetChanged
时,ListView将自动定位到数据集中的第一个项目,而不是位于新项目插入位置之前的位置。
这使得您的列表看起来只跳了50或100条记录。 我认为TranscriptMode设置为正常不是解决方案。列表视图需要作为普通列表视图运行,您需要以编程方式滚动到列表的底部以模拟TranscriptMode,因为它在“正常”下运行。
答案 4 :(得分:2)
尝试使用
LinkedList items = new LinkedList<Object>();
//some fictitious objectList where we're populating data
for(Object obj : objectList) {
items.addFirst(obj);
}
listAdapter.notifyDataSetChanged();
答案 5 :(得分:2)
这解决了问题:
...
ListView lv;
ArrayAdapter<String> adapter;
ArrayList<String> aList;
...
lv = (ListView) findViewById(R.id.mylist);
aList = new ArrayList<String>();
adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, aList);
lv.setAdapter(aAdapter);
...
adapter.insert ("Some Text 1", 0);
adapter.insert ("Some Text 2", 0);
adapter.insert ("Some Text 3", 0);
...
答案 6 :(得分:0)
你应该尝试(列表位置和刷新适配器)
list.add(0,editTextSName.getText().toString());
adapter.notifyDataSetChanged();