마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

listview에 대해서 질문드립니다.

0 추천

HttpURLConnection 객체를 통해서 데이터를 받아온 이후에

listview에 연결된 ArrayList 객체에 정보를 업데이트 하려고 합니다.

 protected void onPostExecute(ArrayList<RoomData> resultRoomDataList) {
          for(int i = 0; i < resultRoomDataList.size(); i++){
                    ((FrameActivity) getActivity()).reservationListCache.add(resultRoomDataList.get(i));
          }

          if(roomDataList != null){
                   for(int i = 0; i < ((FrameActivity) getActivity()).reservationListCache.size(); i++){
                        roomDataList.add(((FrameActivity) getActivity()).reservationListCache.get(i));
                    }
                   listViewAdapter.notifyDataSetChanged();
          }
}

위의 코드는 정상적으로 작동하고

아래의 코드는 리스트뷰가 정상적으로 갱신되지 않습니다.

((FrameActivity) getActivity()).reservationListCache 객체는 해당코드가 Fragment내부에서 진행되어서 

그 부모 activity에 존재하는 ArrayList<RoomData>객체입니다.

 protected void onPostExecute(ArrayList<RoomData> resultRoomDataList) {
        for(int i = 0; i < resultRoomDataList.size(); i++){
               ((FrameActivity) getActivity()).reservationListCache.add(resultRoomDataList.get(i));
         }

          if(roomDataList != null){
                roomDataList = (ArrayList<RoomData>) ((FrameActivity) getActivity()).reservationListCache.clone();
                listViewAdapter.notifyDataSetChanged();
                 listViewAdapter.notifyDataSetChanged();
        }
}

어째서 안되는 것일까요? clone()이라는 함수가 새로운 ArrayList객체를 생성해주는 함수가 아닌가요? 

고수님들 답변 부탁드립니다

라라라라33 (390 포인트) 님이 2016년 8월 18일 질문

1개의 답변

+1 추천
 
채택된 답변
clone 함수는 최상위인 object의 함수로써

List안에 있는 아이템들이 아닌 list 인스턴스 자체의 얕은 복사만 이루어집니다.

List를 깊은복사로 하기 위해서는 별도로 list인스턴스를 초기화하고 source가 되는 리스트의 addAll 함수를 초기화한 list인스턴스를 타겟으로 사용하시면 원하시는 결과를 얻으실수 있을듯 합니댜ㅏ.
Development Guy (70,570 포인트) 님이 2016년 8월 18일 답변
라라라라33님이 2016년 8월 19일 채택됨
...