Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 回收视图';插入的项目插入到错误的位置_Java_Android_List_Android Recyclerview - Fatal编程技术网

Java 回收视图';插入的项目插入到错误的位置

Java 回收视图';插入的项目插入到错误的位置,java,android,list,android-recyclerview,Java,Android,List,Android Recyclerview,我有一个回收视图,它是反向的, 我在handler.postDelay内运行的循环中将项目逐个添加到我的recyclerview中。 我将每个项目添加到位置0,因为我希望将新项目添加到列表的底部,列表的其余部分向上推。 但当我的列表增加时,它也会在不相关的位置添加新的项目。代码如下: private void setRecyclerview() { i = 0; adapterConversation = new AdapterConversation(this, temp.ge

我有一个回收视图,它是反向的, 我在handler.postDelay内运行的循环中将项目逐个添加到我的recyclerview中。 我将每个项目添加到位置0,因为我希望将新项目添加到列表的底部,列表的其余部分向上推。 但当我的列表增加时,它也会在不相关的位置添加新的项目。代码如下:

private void setRecyclerview() {
    i = 0;
    adapterConversation = new AdapterConversation(this, temp.get(i));
    recyclerviewConversation.setLayoutManager(new LinearLayoutManager(this,
            RecyclerView.VERTICAL, true));
    recyclerviewConversation.setAdapter(adapterConversation);
    adapterConversation.addItem(1, temp.get(i));
    adapterConversation.notifyItemInserted(0);
    time = temp.get(i).getStart_at();
    i++;
    setHandler();
}
这是我的处理程序:

 private void setHandler() {
    handler.postDelayed(runnable, time);
    runnable = () -> {
        if (i == temp.size()) {
            finish.setVisibility(View.VISIBLE);
        }
        if (i < temp.size() && !isPaused && (temp.get(i).getStart_at()) * 1000 < player.getCurrentPosition()) {
            adapterConversation.addItem(1, temp.get(i));
            //adapterConversation.notifyItemInserted(adapterConversation.getItemCount() - (i + 1));
            adapterConversation.notifyItemInserted(0);
            recyclerviewConversation.scrollToPosition(0);
            i++;
            if (i < temp.size()) {
                time = temp.get(i).getStart_at();
            }
        }
        handler.postDelayed(runnable, time);
    };
    runnable.run();
}
当我的列表增长时,列表中的旧项会发生变化,它们会得到新的值(这是最新添加的值),但我不会调用“notifyDataSetChange” 有人知道为什么会这样吗?此“notifyItemInserted”插入位置是否错误


感谢您的帮助首先,
notifyDataSetChange
notifyitemserted
调用是
BaseAdapter
方法。这意味着调用它们不会在列表中“插入”任何您试图显示的内容。他们只需要在列表中添加新项目并更新视图的任何观察者

在您的代码中,似乎总是将项目添加到特定位置。因为你启动了
inti=0setRecyclerview()
中的code>,这意味着每次插入的位置都是0。你不必这么做。只是。将新项目添加到列表中,并设置使用
LinearLayoutManager.setReverseLayout(true)
,从视图底部显示

public AdapterConversation(Context context) {
    this.context = context;
    this.itemCount = 0;
}

public void addItem(int item, LessonDetailText lessonDetailText) {

    itemCount += item;
    lessonDetailTextList.add(lessonDetailText);
}