RecyclerView适配器性能方法

时间:2015-10-23 18:07:12

标签: java android android-asynctask android-recyclerview android-adapter

我从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);
     }
}

我想了解第二种方法是否优于第一种方法:

  1. 响应式用户界面;
  2. 性能;

2 个答案:

答案 0 :(得分:2)

我不是专家,但我认为第二种方法强制您的RecyclerView重绘自己~30次(每个MyObject一次),而第一种方法只进行一次绘制过程。由于你的元素很少,我认为第一种方法是可以的。但是等待这个领域比我更熟练的人的答案。

答案 1 :(得分:0)

第二种方法更好。 Recycler视图将批处理所有添加调用,直到下一个动画帧,并且仅绑定新项目(如果它们可见)。如果你可以拨打notifyItemRangeInserted,那就更好了。当然我假设这个AsyncTask多次运行,否则无关紧要。