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

그리드뷰 아답터 데이터체인지시 값이 레퍼런스로 전달되는문제

0 추천
private ArrayList<Images> adapterArrayList = null;

	public FolderAdapter(Context context, int resource, ArrayList<Images> list, AdapterListener listener) {
		super(context, resource, list);
		this.context = context;
		mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		this.listener = listener;
		adapterArrayList = list;
	}

먼저 아답터의 생성자부분 입니다.

 

그리고 어레이리스트를 셋팅해주는 부분입니다.

 

public void setArrayList(ArrayList<Images> adapterList){
		if (adapterArrayList != null && adapterArrayList.size() > 0){
			Log.d("check","adapterList : "+adapterList.size());
			adapterArrayList.clear();
			Log.d("check","adapterList : "+adapterList.size());
		}
		adapterArrayList	=	adapterList;
		Log.d("check","size : "+adapterArrayList.size());
	}

 

 

로그를 찍어서 확인해봤는데 기존에 있던 어레이리스트를 clear 해버리면 매개변수까지 같이 clear되어져버립니다.

adapter = new FolderAdapter(AlbumActivity.this,R.layout.album_item,image_list, this);

 

이부분이 처음 생성자가 불러지는 부분이고

adapter.setArrayList(image_list);
					adapter.notifyDataSetChanged();

 

문제가 생기는 부분입니다.

아답터클래스에서 adapterList를 clear하면 그리드뷰를 사용하는 다른 클래스에서 가지고있던 image_list까지 clear 되어져버리는현상입니다.

왜이런걸까요?

익명사용자 님이 2017년 7월 10일 질문

1개의 답변

0 추천
자바의 기본적인 메모리 개념이 안잡혀 있으시군요~~!

http://kd3302.tistory.com/25

좋은 글이있어 링크 남깁니다.

하여~~! 자바에서 배열을 다른 클래스에서 비동기로 사용하고 싶으시다면 다른메모리에 복사하신후 사용하셔야 합니다.
ThisPlus (46,920 포인트) 님이 2017년 7월 10일 답변
...