3

我使用了Recycler View来显示我的数据列表。我调用Web服务并从服务器获取数据,并使用服务器数据更新当前的ArrayList。 这是我如何填写我当前ArrayList中的数据。通过RecyclerView中的notifyDataSetChanged发布更新数据

mAlUotesDatas.clear(); 
mAlUotesDatas = (ArrayList<BillBoardData>) webservice.data; 
mUotesAdaptor.notifyDataSetChanged(); 

和应用notifyDataSetChanged()以反映数据的列表中,但它并不反映列表。在mAlUotesDatas它显示更新的数据,但它不显示更新的数据列表。

之后,我改变它像

mAlUotesDatas.clear(); 
mAlUotesDatas.addAll(res.data); 
mUotesAdaptor.notifyDataSetChanged(); 

这工作得很好。对我而言,这很令人惊讶,它是如何工作的,虽然两者在web服务调用后都有更新的数据。

任何人都可以帮助我理解这是怎么回事。

这是我的班。

package com.mimran.aphorismus.models; 

import android.os.Bundle; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.mimran.aphorismus.R; 
import com.mimran.aphorismus.adapters.QuotesAdaptor; 

import java.util.ArrayList; 

public class DataFragment extends Fragment { 

private RecyclerView mRcvQuotes; 
private QuotesAdaptor mUotesAdaptor; 
private ArrayList<BillBoardData> mAlUotesDatas; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    mRcvQuotes = (RecyclerView) links(R.id.rcv_quotes); 
    mUotesAdaptor = new QuotesAdaptor(mContext, mAlUotesDatas); 
    mRcvQuotes.setAdapter(mUotesAdaptor); 

    return inflater.inflate(R.layout.my_view, container, false); 
} 

public void webserviceCall() { 
    public void onResponse() 
    { 
     if (response.isSuccess()) { 
      mAlUotesDatas.clear(); 
      //mAlUotesDatas = (ArrayList<BillBoardData>) res.data; 
      mAlUotesDatas.addAll(res.data); 
      mUotesAdaptor.notifyDataSetChanged(); 
     } 
    } 

} 
} 
+0

如果有帮助请接受答案,请:) – mklimek

回答

2

它不起作用,因为您不会将项目添加到适当的数据收集实例。

Adapter在具有特定数据收集实例的构造函数中进行初始化,并且它始终处理它。

在此之后:

mAlUotesDatas = (ArrayList<BillBoardData>) webservice.data; 

mAlUotesDatas是不同的集合的引用比Adapter的实例。

然后:

mUotesAdaptor.notifyDataSetChanged(); 

实际上通知适配器有关这并没有改变在“旧”收集数据的变化。

当您使用clearaddAll时,它的工作原理是因为您使用相同的实例并且正在替换其中的项目。

相关问题