Android

리사이클러뷰 리스트 바인딩 문제

그란. 2018. 7. 27. 10:05


기존

리사이클러뷰 어댑터와 리스트를 연결하기 위해서  액티비티에서 ArrayList<> aList = new ArrayList<>(); 선언후


어댑터에서는 생성자에서 List 를 받은후 this.aList = aList; 로 해주었다


액티비티에서 자료를 받은 후 aList.add()-> adapter.notifyDataSetChanged()으로 하면 데이터가 연결 된다


어댑터 쪽에서 인식을 못한다 (카운트:0)


문제

하지만 API 로 통신 한후 Gson을 통해 배열로 받아와서 List 에  넣기 위해

DTO[] array = gson.fromJson(list, DTO[].class);

dtos = new ArrayList<DTO>(Arrays.asList(array));



이렇게 해서 adapter.notifyDataSetChanged() 을 하면 리스트 바인딩이 안된다.




해결

Arrays.asList로 바로 어레이리스트를 만들면 add 한것과 다르게 작동을 하는것같다
(아니 심지어 asList 를 하고 객체를 생으로 만들어서 DTOS ArrayList에 add 를 해도 안먹힌다 ;;)


그리고 add 뿐만 아니라 clear 도 안되고 remove 도 안된다 (에러발생)

그래서 리스트를 어댑터에 넘겨서 직접 알려줘야한다

adapter에

public void setData(ArrayList<DTO> dtos) {
this.dtos = dtos;
notifyDataSetChanged();
}


함수를 만들어서 액티비티에서

adapter.setData(dtos);


를 호출해서 직접 알려주면 된다.