Android 为什么RecyclerView在没有notifyDataSetChanged()的情况下更新?
当您更改RecyclerView适配器正在处理的数组以更新视图并反映所做的更改时,通常会调用Android 为什么RecyclerView在没有notifyDataSetChanged()的情况下更新?,android,android-recyclerview,recyclerview-layout,Android,Android Recyclerview,Recyclerview Layout,当您更改RecyclerView适配器正在处理的数组以更新视图并反映所做的更改时,通常会调用notifyDataSetChanged()或notifyItemChanged()。但我编写了一个示例应用程序,在同一块中调用.setAdapter()后立即向数组中添加项时,这两个应用程序都不会被调用,并且视图会更新!当我试图通过按钮的onClickListener或从后台线程添加项目时(都需要notifyDataSetChanged才能更新视图),不会发生这种行为 这是怎么回事?在同一块中调用.se
notifyDataSetChanged()
或notifyItemChanged()
。但我编写了一个示例应用程序,在同一块中调用.setAdapter()
后立即向数组中添加项时,这两个应用程序都不会被调用,并且视图会更新!当我试图通过按钮的onClickListener
或从后台线程添加项目时(都需要notifyDataSetChanged
才能更新视图),不会发生这种行为
这是怎么回事?在同一块中调用.setAdapter()
后立即向列表中添加项目是否需要类似于notifyDataSetChanged()
的内容
i、 e
如果您将
数组列表
传递给适配器
,并在onCreate
中添加元素,则在应用程序绘制第一帧之前
有时您可以添加元素,因为适配器没有布置项目
在您的onClick
中,这将在onCreate
完成后进行,这意味着适配器已经布置好
您可以尝试移动add(“c”)
到onPostCreate
或onResume
,您可能会看到与您的onClick
类似的结果。您是否碰巧有一个来源或参考,用于您提到的“因为适配器没有布置项目”?@GrantPark否,我没有。这只是Android的生命周期,onCreate
在实际布局之前。例如,如果您试图在onCreate
中获取RecyclerView
的高度/宽度,它将返回0。您可以查看类似的内容,这表明您可以在实际布局时得到一个回调。
@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`
}
});
...