为什么在没有notifyDataSetChanged()的情况下RecyclerView更新?

问题描述 投票:0回答:1

当你改变由RecyclerView适配器处理的数组时,调用notifyDataSetChanged()notifyItemChanged()是为了更新视图并反映所做的更改。但是我创建了一个示例应用程序,当我在同一个块中调用.setAdapter()后立即向数组添加项目时,两个都没有被调用,并且视图更新!当我尝试通过按钮的onClickListener或后台线程添加项目时都不会发生这种情况(两者都需要notifyDataSetChanged才能更新视图)。

这里发生了什么?在同一块中调用.setAdapter()之后,不应该立即将项添加到列表中需要像notifyDataSetChanged()这样的东西吗?

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...

        myList.add("a");
        myList.add("b");
        recyclerView.setAdapter(adapter);
        myList.add("c"); // the recyclerView is updating and shows "c" here! why???

        findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                myList.add("e"); // the recyclerView will NOT update here unless you call `notifyDataSetChanged`
            }
        });

        ...
android android-recyclerview recycler-adapter recyclerview-layout
1个回答
0
投票

如果你将ArrayList传递给你的Adapter,并且你在onCreate中添加了元素,那就是在应用程序绘制你的第一帧之前。

有一段时间你可以添加元素,因为适配器没有布置项目。

在你的onClick内,这将是在onCreate完成后,这意味着adapter已经布局。

您可以尝试将add("c");移动到onPostCreateonResume,您可能会看到与onClick类似的结果。

© www.soinside.com 2019 - 2024. All rights reserved.