繁体   English   中英

在Android上添加新项目到列表视图的顶部?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM