我从AsletTask下载数据,创建少于30个 MyObject 对象,并将其添加到列表中。最后,我将创建一个 MyAdapter ,将列表作为参数传递,并将 MyAdapter 设置为回收站视图适配器:
myList.add(new MyObject("aa", "bb", cc"); //for each piece of data by Internet
MyAdapter myAdapter = new MyAdapter(myList);
recyclerView.setAdapter(myAdapter);
现在我正在思考一种更好的编程方式:在AsyncTask启动之前创建一个新的 MyAdapter ,将其分配给RecyclerView以及每个新的 MyObject 我调用 MyAdapter 方法,在列表中添加对象并调用 notifyItemInserted :
myAdapter = new MyAdapter();
recyclerView.setAdapter(myAdapter);
myAdapter.addMyObject(new MyObject("aa", "bb", cc"); //for each piece of data by Internet
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<News> data = new ArrayAdapter<>();
public void addMyObject(MyObject myObject) {
data.add(myObject);
notifyItemInserted(this.data.size() -1);
}
}
我想了解第二种方法是否优于第一种方法:
答案 0 :(得分:2)
我不是专家,但我认为第二种方法强制您的RecyclerView重绘自己~30次(每个MyObject一次),而第一种方法只进行一次绘制过程。由于你的元素很少,我认为第一种方法是可以的。但是等待这个领域比我更熟练的人的答案。
答案 1 :(得分:0)
第二种方法更好。 Recycler视图将批处理所有添加调用,直到下一个动画帧,并且仅绑定新项目(如果它们可见)。如果你可以拨打notifyItemRangeInserted
,那就更好了。当然我假设这个AsyncTask多次运行,否则无关紧要。