RecyclerView / CardView数据集更新

时间:2014-10-13 02:10:35

标签: android android-asynctask android-5.0-lollipop android-cardview

我正在尝试在RecyclerView完成其操作后更新AsyncTask

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Initializing RecycleView
    mRecyclerView = (RecyclerView)findViewById(R.id.list);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    mRecyclerView.setItemAnimator(new DefaultItemAnimator());

    mAdapter = new AdvertAdapter(this.results, R.layout.card_advert, this);
    mRecyclerView.setAdapter(mAdapter);

以下是我AsyncTask的代码段:

    @Override
    protected void onPostExecute(String result){
        // your stuff
        listener.onTaskCompleted(data);
    }

在侦听器Activity类中,我正在更新数据集并尝试通知我的自定义适配器数据集已更改:

@Override
public void onTaskCompleted(ArrayList<Data>results) {
    this.results = results;
    this.mAdapter.notifyDataSetChanged();
    System.out.println("Done.");
}

似乎notifyDataSetChanged()实际上并没有做任何事情,因为即使在最后一行之后,列表仍然是空的。从调试器中,我可以验证结果是否包含正确的结果,并且onTaskCompleted正在主线程上运行。如何使用新结果更新我的RecyclerView

1 个答案:

答案 0 :(得分:1)

我认为您应该将ArrayList<Data>results添加到适配器数据中。

这样的事情:

@Override
public void onTaskCompleted(ArrayList<Data>results) {
    //this.results = results;

    this.mAdapter.clear();
    this.mAdapter.add(results);
    //or this.mAdapter.results = results;

    this.mAdapter.notifyDataSetChanged();
    System.out.println("Done.");
}