0
내 목록보기의 모든 행에 다른 이미지를로드하는 중, 여러 가지 자습서를 살펴본 후 가장 좋은 방법으로 Google 비디오를 보았지만 여전히 작동하지 않습니다. 정확히. 내 목록보기 항목은 슬라이드 쇼의 모든 이미지를 표시하며 내 목록을 스크롤하면 변경됩니다.목록보기의 이미지를로드 할 때 제대로 작동하지 않습니다.
유니버설 이미지 로더를 사용하여 이미지를 다운로드하고 캐시합니다. 내 전체 클래스에 대한 내 코드는 다음과 같습니다. 나는 단지 이것을 작동시키지 않는 것 같다.
public class EventAdapter extends ArrayAdapter<EventDetails>{
private Context context;
LayoutInflater inflater;
LinkedList<EventDetails> event_details;
ImageView event_imge;
ViewHolder holder;
public ImageLoader imageLoader;
public EventAdapter(Context mcontext,
LinkedList<EventDetails> m_event_details) {
super(mcontext, R.layout.event_list_row, m_event_details);
this.context = mcontext;
this.event_details = new LinkedList<EventDetails>();
this.event_details = m_event_details;
}
public View getView(int position, View myview, ViewGroup parent) {
View v = myview;
if (inflater == null) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
if (v == null) {
v = inflater.inflate(R.layout.event_list_row, parent,
false);
imageLoader = ImageLoader.getInstance();
holder = new ViewHolder();
holder.event_name = (TextView) v.findViewById(R.id.event_name);
holder.event_show = (TextView) v.findViewById(R.id.event_show);
holder.event_time = (TextView) v.findViewById(R.id.event_time);
holder.event_date = (TextView) v.findViewById(R.id.event_date);
holder.event_genre = (TextView) v.findViewById(R.id.event_genre);
holder.event_price = (TextView) v.findViewById(R.id.event_price);
holder.img = (ImageView) v.findViewById(R.id.event_image);
holder.event_ll = (LinearLayout) v.findViewById(R.id.event_frame_ll);
v.setTag(holder);
}else{
holder = (ViewHolder) v.getTag();
}
final EventDetails eD = event_details.get(position);
if(eD != null){
holder.event_name.setText(eD.name.toUpperCase());
holder.event_show.setText(eD.show.toUpperCase());
holder.event_time.setText(eD.time.toUpperCase());
holder.event_date.setText(eD.date.toUpperCase());
holder.event_price.setText("£"+String.format("%.2f", eD.price));
holder.event_genre.setText(eD.genre.toUpperCase());
if(eD.isStandBy == 0){
holder.event_ll.setVisibility(View.GONE);
}else{
holder.event_ll.setVisibility(View.VISIBLE);
}
holder.img.setTag(eD.image_url[0]);
if(MemoryCacheUtil.findCachedBitmapsForImageUri(eD.image_url[0], ImageLoader.getInstance().getMemoryCache()).size() > 0){
//holder.img.setBackgroundDrawable(new BitmapDrawable(MemoryCacheUtil.findCachedBitmapsForImageUri(eD.image_url[0], ImageLoader.getInstance().getMemoryCache()).get(0)));
holder.img.setImageBitmap(MemoryCacheUtil.findCachedBitmapsForImageUri(event_details.get(position).image_url[0], ImageLoader.getInstance().getMemoryCache()).get(0));
}else{
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true).build();
ImageLoader.getInstance().loadImage(eD.image_url[0], options, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
//holder.img.setBackgroundDrawable(new BitmapDrawable(loadedImage));
holder.img.setImageBitmap(loadedImage);
}
});
}
}
return v;
}
static class ViewHolder{
TextView event_name;
TextView event_show;
TextView event_time;
TextView event_date;
TextView event_genre;
TextView event_price;
ImageView img;
LinearLayout event_ll;
}
이것은 슬라이드 쇼 효과를 해결하는 것으로 보이지만 스크롤하는 동안 두 개의 이미지가 변경되며 대개 화면의 맨 위와 맨 아래에 표시됩니다. ViewHolder 클래스를 getView에서 final로 정의해야만 onDownloadFinished의 holder.img에 표시 될 수 있습니다. – Amanni
다른 문제는 내 캐시 된 이미지를 캐싱하고 검색하는 것과 같습니다. – Amanni
'inflater == null'을 체크하지 않고 단지 뷰를 팽창 시키면 뷰를 새로 고침 할 것이다. – Brandon