2016-09-24 9 views
0

에 대한 새로운 데이터를 가져 오는하지 변경된 알리고 이유는 확실하지 않다 :데이터 세트가 나는 recyclerview가 업데이트되지 않은 recyclerview

내 주요 조각에서

이 같은 oncreateview에 내 recyclerview에 대한 데이터를 얻을 :

alarms = AlarmCollection.getAlarms(getActivity()); 

다음이 같은 어댑터 설정 :

// Adapter 
    adapter = new AlarmsAdapter(getActivity(), alarms); 
    rv.setAdapter(adapter); 

를 그리고 나는 그들이 알 수 있습니다합니다 (recyclerview에의 값을 업데이트하는 실행 가능한/A의 TimerTask의 데이터를 재설정 무기가 1 분에 1 번 변하기 때문에).

이 datasetchanged 통지 간단한 통해 이루어집니다 : 나는 AlarmCollection를 통해 데이터를로드 위에서 볼 수 있듯이 비록

adapter.notifyDataSetChanged(); 

문제입니다. 이것은 공유 환경 설정에서 목록을 잡아입니다.

그러나 알림 데이터 세트를 호출 할 때이 메시지가 다시 호출되지 않습니다.

나는 recyclerview에서 알림을 호출하면 목록을 업데이트하거나 뷰를 업데이트하는 느낌을 받았습니까?

답변

1

를 호출, 문제는이 라인에있다 :

alarms = AlarmCollection.getAlarms(getActivity()); 

당신이 어댑터 나누었다 alarms의 새로운 인스턴스를 만들 때마다 당신이 전달 alarms의 인스턴스의 변화를 찾고 있습니다 그것. 그래서 그것은 작동하지 않을 것이다.

alarms에서 모든 항목을 제거하고 새 데이터를 다시 추가해야합니다.

alarms.removeAll(); 
alarms.addAll(AlarmCollection.getAlarms(getActivity())); 
adapter.notifyDataSetChanged(); 

참고 : 업데이트 메인 스레드에서 alarms. 한 번, 그것은 다른 스레드에서 데이터 집합을 업데이 트하는 이해가 오랜 시간이 걸립니다 실 거예요 어댑터와 함께.

0

getItemCount()이 0을 반환하면 notifyDataSetChanged()은 아무 것도 처리하지 않습니다.

RecyclerView 어댑터에 getItemCount()을 추가했는지 확인하십시오.

@Override 
public int getItemCount() { 
    return alarms.size(); 
} 

편집 : 당신은 또한 notifyitemrangechanged

adapter.notifyItemRangeChanged(0,alarms.size()); 
0

notifyDataSetChanged() 만 뷰를 업데이트 할 수 있습니다. 당신의 타이머 작업/실행 가능한 내부 alarms를 업데이트 한 후 :. 일반적으로 당신이 할 것입니다 것은 그래서 당신은 일을해야하는 것은 당신이 당신의 경우 alarms에 (어댑터가 보유하고있는 데이터를 수정 한 후 notifyDataSetChanged() 전화

입니다 @GpRyan가 언급 한 바와 같이 notifyDataSetChanged()

+0

또한 어댑터가 '알람'참조를 가리키고 있기 때문에이 기능이 작동한다고 언급 하겠지만 변경 (추가, 제거 등) 할 때 UI에 알리면됩니다 – GPRyan

관련 문제