[英]Add new items to top of list view on Android?
Android具有脚本模式 ,允许在将新数据添加到适配器时自动将列表视图滚动到底部。
可以以某种方式反转,以便在列表顶部自动添加新项目(“逆转录模式”)
方法stackFromBottom似乎是正确的,但不会在输入更改时自动滚动。
有没有人有一些示例代码,其中列表不断添加总是插入顶部的东西? 我在这里走在正确的轨道上吗?
更新
谢谢你的回答,这让我想得更多。 其实。 我想让新条目显示在顶部,但屏幕仍然显示用户正在查看的项目。 用户应主动滚动到顶部以查看新项目。 所以我觉得成绩单模式不是我想要的。
嗯,好吧,如果我要尝试这个,我会做类似以下的事情:
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)。
而不是这个:
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);
}
});
当东西被添加到ListView时,仅仅添加smoothScrollToPosition(0)
是不是足够了? 不要以为有自动滚动选项。
我花了几个小时试图完成同样的事情。 从本质上讲,这就像一个聊天应用程序,用户向上滚动以查看列表顶部的旧消息。
问题是,您想要在顶部动态添加另外50或100条记录,但滚动应该从添加前置项目的位置开始连续。
当您执行notifyDataSetChanged
,ListView将自动将其自身定位在数据集中的第一项,而不是位于插入新项目的位置之前的位置。
这使得它看起来像你的列表只跳了50或100条记录。 我相信TranscriptMode设置为正常不是解决方案 。 列表视图需要作为普通列表视图运行,您需要以编程方式滚动到列表的底部以模拟TranscriptMode,因为它在“正常”下运行。
尝试使用
LinkedList items = new LinkedList<Object>();
//some fictitious objectList where we're populating data
for(Object obj : objectList) {
items.addFirst(obj);
}
listAdapter.notifyDataSetChanged();
这解决了这个问题:
...
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);
...
你应该尝试(列表位置和刷新适配器)
list.add(0,editTextSName.getText().toString());
adapter.notifyDataSetChanged();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.