안드로이드 개발 질문/답변
(글 수 45,052)
리스트 뷰를 구현 중입니다
image 다운받을 경우 메모리 문제 때문에 오류가 발생해서 그부분을 해결하고자
http://givenjazz.tistory.com/48
의 내용을 참고하여 RecycleUtils 클래스를 사용 하여 가비지콜렉터가 메모리 환원 할 수 있도록 하는 부분을 적용중인데
나중에 해제할 뷰를 배열에 WeakReference 를 사용 하여 추가하는 부분인데
원래 소스는
- ImageView i = new ImageView(mContext);
-
i.setImageResource(mOptionList.get(position));
-
-
//메모리 해제할 View를 추가
-
mRecycleList.add(new <WeakReference<View>(i));
이미지 뷰를 생성하고 나중에 메모리에서 해제하기 위하여 배열에 이미지뷰를 저장하는 부분인데
제가 소스에 적용한 부분은
viewHolder.vGoodImage = (ImageView) convertView.findViewById(R.id.img);
이미지 뷰를 뷰홀더로 생성하고 해제할 뷰를 추가 하는 부분 입니다
mRecycleList.add(new <WeakReference<View>(viewHolder.vGoodImage));
저는 계속 오류가 나는 군요
Multiple markers at this line
- The method add(WeakReference<View>) in the type List<WeakReference<View>> is not applicable for the
arguments (ImageView)
- Syntax error on token(s), misplaced construct(s)
class GoodListAdapter extends BaseAdapter {
Context maincon;
LayoutInflater Inflater;
ArrayList<GoodData> arrItems;
int layout;
private final ImageDownloader imageDownloader = new ImageDownloader();
private List<WeakReference<View>> mRecycleList = new ArrayList<WeakReference<View>>();
public GoodListAdapter(Context context, int alayout, ArrayList<GoodData> arItems) {
maincon = context;
Inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
arrItems = arItems;
layout = alayout;
}
public int getCount() {
return arrItems.size();
}
public String getItem(int position) {
return arrItems.get(position).goodName;
}
public long getItemId(int position) {
return position;
}
// 각 항목의 뷰 생성
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
String imageUrl = "";
if (convertView == null) {
Log.v("testLog", "getView");
Log.v("testLog", "getView_goodImage:"+arrItems.get(position).goodImage);
Log.v("testLog", "getView_goodName:"+arrItems.get(position).goodName);
Log.v("testLog", "getView_position:"+pos);
convertView = Inflater.inflate(layout, parent, false);
viewHolder = new GoodViewHolder();
viewHolder.vGoodImage = (ImageView) convertView.findViewById(R.id.img);
viewHolder.vGoodName = (TextView) convertView.findViewById(R.id.text);
//viewHolder.vOrderBtn = (Button) convertView.findViewById(R.id.btn);
convertView.setTag(viewHolder);
}
else
{ Log.v("testLog", "convertView :"+(GoodViewHolder) convertView.getTag());
viewHolder = (GoodViewHolder) convertView.getTag();
}
imageUrl = arrItems.get(position).goodImage;
imageDownloader.download(Base64.encode(imageUrl.getBytes(), 0), viewHolder.vGoodImage);
viewHolder.vGoodName.setText(arrItems.get(position).goodName);
//아래부분에서 오류발생
mRecycleList.add(new <WeakReference<View>(viewHolder.vGoodImage));
/*
viewHolder.vOrderBtn.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
String str = arrItems.get(pos).goodName + "를 주문합니다.";
Toast.makeText(maincon, str, Toast.LENGTH_SHORT).show();
}
});;
*/
return convertView;
}
public ImageDownloader getImageDownloader()
{
return imageDownloader;
}
public void recycle() {
for (WeakReference<View> ref : mRecycleList) {
RecycleUtils.recursiveRecycle(ref.get());
}
}
}이 게시물을



아규먼트는 View 가아니고 ImageView를 쓰라고 나와있구만유