RecyclerView에서 어댑터 어댑터를 설정할 때 데이터 집합의 직접 참조를 전달할 수 없습니다. 그렇지 않으면 주Activity 데이터가 혼란스러울 수 있습니다

예를 들어 주Activity에서 데이터 원본을 adapter 구축 대상에게 직접 전달한 다음에 adapter에서 데이터에 대해 다른 조작을 했다. 이것은 주Activity에서 데이터의 변화를 일으킬 수 있다.
public AdImagePicker(Activity activity, List imgList,
                         OnImageViewListener imageViewListener) {
        this.activity = activity;
        this.list = imgList;//       
        list.add("default");
        this.imageViewListener = imageViewListener;
    }

또는
public AdImagePicker(Activity activity, List<String> pathList, OnImageViewListener imageViewListener) {
    this.activity = activity;
    if (pathList != null) {
        if(list==null){
            list = new ArrayList<>();
        }else{
            list.clear();
        }
        list = pathList;
        //      item
        list.add("default");
    }
    this.imageViewListener = imageViewListener;
}

그런 다음 주 Activity의 컬렉션을 인쇄합니다.
path:/storage/sdcard0/DCIM/Camera/IMG_20160627_194105.jpg path:/storage/sdcard0/DCIM/Camera/IMG_20160627_194102.jpg path:/storage/sdcard0/360Download/206FF0C0FD7237E1C5F12C246CF067DA.png path:default
아댑터에서 집합된 데이터를 수정했고 주Activity에서도 데이터가 달라진 것을 보았습니다.
이렇게 쓰면 다음과 같습니다.
public AdImagePicker(Activity activity, List pathList, OnImageViewListener imageViewListener) {
    this.activity = activity;
    if (pathList != null) {
        if (list == null) {
            list = new ArrayList<>();
        } else {
            list.clear();
        }
        for (int i = 0; i < pathList.size(); i++) {
            list.add(pathList.get(i));
        }
        //      item
        list.add("default");
    }
    this.imageViewListener = imageViewListener;
}

출력 출력:
path:/storage/sdcard0/DCIM/Camera/IMG_20160627_194105.jpg path:/storage/sdcard0/DCIM/Camera/IMG_20160627_194102.jpg path:/storage/sdcard0/360Download/206FF0C0FD7237E1C5F12C246CF067DA.png
우리는 여기에서 데이터copy를 다른 집합에 전달하는 것이지 다른 집합에 직접 전달하는 것이 아니기 때문에 문제가 없을 것이다.

좋은 웹페이지 즐겨찾기