0

새로 고침하지 나는이RecyclerView 어댑터 notifyDataSetChanges는() recyclerview

@Override 
public void setTenData(List<Data> dataList) { 
    Timber.d("set ten drugs size %s",dataList.size()); 
     this.dataList = dataList; 
     dataListAdapter = new DataListingAdapter(getActivity(), this.dataList); 
     mRecyclerView.setAdapter(dataListAdapter); 

} 

같은 RecyclerView을 설정 한 그리고 다른 방법으로 나는 새로운 데이터를 얻을 나는이

@Override 
public void setNewsData(List<Data> dataList) { 
    this.dataList = dataList; 
    Timber.d("size of news data %s",this.dataList.size()); 
    dataListAdapter.notifyDataSetChanged(); 
} 
같은 RecyclerView을 다시 시도 할 때

RecyclerView가 업데이트되지 않습니다. 무엇이 문제일까요?

+0

어댑터로 설정하면 –

+0

그 방식으로 작동하지만 제대로 수행하지 않아야합니다. – theanilpaudel

+0

@theanilpaudel 아니오, 귀하의 방식에 따라보기의 참조가 이전 목록에서 새 목록으로 변경됩니다. 어댑터의 참조가 여전히 이전 목록을 가리 킵니다. –

답변

2

당신은 당신은 단순히 당신의 목록을 지우고 그와 어댑터를 통지보다 새로운 데이터를 추가 할 수 있습니다

+0

당신이 대답은 완전히 정확하고, 당신의 허락하에 notifiDataSetChanged가 MainThread에서 수행되었음을 확인하기 위해 추가 할 것입니다. – Neonamu

+0

this.dataList가 어댑터에 설정되어 있습니다. – theanilpaudel

+1

어댑터에 함수를 추가하십시오 :'public void setDataList (List dataList)'그리고 새로운 데이터를 어댑터 목록으로 설정하십시오. 그리고 @Neonamu가 말했듯이 notifyDataSetChanged가 주 스레드에서 호출되도록하십시오. –

0
@Override 
public void setTenData(List<Data> dataList) { 
    Timber.d("set ten drugs size %s",dataList.size()); 
     this.dataList = dataList; 
     dataListAdapter = new DataListingAdapter(getActivity(), this.dataList); 
     mRecyclerView.setAdapter(dataListAdapter); 
dataListAdapter.notifyDataSetChanged(); 

} 
0

아니라보기에, 어댑터에 새 데이터를 설정해야합니다. 여기에 내가 코드 수정 :

@Override 
public void setNewsData(List<Data> dataList) { 
    this.dataList.clear(); 
    this.dataList.addAll(dataList); 
    dataListAdapter.notifyDataSetChanged(); 
} 
+0

거기에있는 데이터 클래스는 RealmObject를 확장하므로이 목록에서 데이터를 지우고 추가 할 수 없습니다. – theanilpaudel

0
public void setNewsData(List<Data> dataList) { 
    this.dataList.addAll(dataList); //  if datalist has only new data 
    //this.dataList = dataList;//  if datalist has all data 
    Timber.d("size of news data %s",this.dataList.size()); 
} 

그리고 메인 스레드를 호출을;

dataListAdapter = (RecyclerViewAdapter) recyclerView.getAdapter(); 
dataListAdapter.setNewsData(dataList); 
dataListAdapter.notifyDataSetChanged();