ImageView 및 TextView가 포함 된 ListView가 있습니다. 나는 서브 클래 싱 된 AsyncTask를 통해 인터넷에서 이미지를로드 할 수 있도록 ArrayAdapter를 서브 클래 싱합니다. 지금까지 좋은 모든 것.convertView 사용할 때의 문제, 내가하지 않을 때의 문제
문제는 convertView를 사용하려고하면 이미지가 잘못된 행으로 잠깐 재활용되는 문제가 있다는 것입니다. (이것은 회사의 로고이므로 좋지 않습니다.)
그러나 convertView를 사용하지 않으면 사용자가 스크롤 할 때 이미지가 손실됩니다. 그래서 아래로 스크롤하면 이미지가 인터넷에서 다시로드됩니다 (데이터 사용, 배터리 수명 등).
이 문제를 해결할 수있는 간단한 방법이 있습니까? 매번 인터넷에서로드하거나 이미지를 옮길 수 있습니까?
는 여기에 지금까지 사용하고있는 작업은 다음과 같습니다
public class SupplierAdapter extends ArrayAdapter<Supplier>{
int resource;
String response;
Context context;
public SupplierAdapter(Context context, int resource, List<Supplier> suppliers) {
super(context, resource, suppliers);
this.resource = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
LinearLayout view;
Supplier s = getItem(position);
if(convertView == null){
view = new LinearLayout(getContext());
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater vi;
vi = (LayoutInflater) getContext().getSystemService(inflater);
vi.inflate(resource, view, true);
} else {
view = (LinearLayout) convertView;
}
ImageView iv = (ImageView) view.findViewById(R.id.thumbnail);
// s.getThumbnail returns a URL
new DownloadImageTask(iv).execute(s.getThumbnail());
TextView titleText =(TextView) view.findViewById(R.id.titleText);
titleText.setText(s.getTitle());
titleText.setTag(s.getId());
return view;
}
}
모든 대단히 감사합니다 :)
SimpleAdapter를 사용하고 캐싱을 고려 했습니까? –
@ 단, 그렇지 않았습니다. 정확히 캐시해라. SD 카드에 저장 하시겠습니까? 그게 어떻게 작동하는지 모르겠습니다. –
SimpleAdapter는 String 배열을 처리하는 것 이상의 기능을하는 경우에 더 좋습니다. 캐싱의 경우 SD에 저장하고 업데이트를 확인할 수있는 기준을 마련하십시오. –