2014-01-13 2 views
1

현재 응용 프로그램에서 Droidparts ImageFetcher를 사용하고 있습니다 (또는 적어도 시도하고 있습니다). CursorAdapter와 함께 작동하는 방법을 보여주는 샘플 코드가 있지만 모든 것을 이해하지 못하고 ArrayAdapter로 복제 할 수 없습니다. I 생각하다. 나는 InjectDependency가 어떻게 작동 하는지를 이해한다. 그러나 그 것이 더 설명되거나 대답에 포함되지 않는다면 나는 감사 할 것이다.ImageFetcher를 사용하여 ArrayAdapter의 재활용 문제

어쨌든 제 질문은 이미지 뷰를 재활용 한 후에 잘못된 이미지가로드되는 것을 어떻게 방지합니까?

@Override 
public View getView(int position, View view, ViewGroup parent) 
{ 
    if(view == null) 
    { 
     LayoutInflater inflater = (LayoutInflater) m_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(m_resourceId, parent, false); 
    } 

    TextView titleView = (TextView) view.findViewById(R.id.title); 
    if(titleView != null) titleView.setText(m_values.get(position).title); 

    ImageView imageView = (ImageView) view.findViewById(R.id.image); 
    if(imageView != null) 
    { 
     imageView.setImageDrawable(null); 

     ViewHolder holder = new ViewHolder(); 
     holder.imageView = imageView; 

     m_imageFetcher = new ImageFetcher(m_context); 
     m_imageFetcher.attachImage(m_values.get(position).imageUrl, holder.imageView, null, 10, null); 

     view.setTag(holder); 
    } 

    return view; 
} 

모든 포인터 나 : 여기

내 코드의 ... 내가보기에 태그로 ImageHolder를 부착하려고했지만이 일을하지 않았고 내가 그 뒤에 논리를 볼 수 없습니다 예를 들어 주시면 감사하겠습니다.

답변

1

이미 LayoutInflater의 인스턴스가 포함 된 org.droidparts.adapter.widget.ArrayAdapter 확장을 권하고 싶습니다. 당신이 그렇게, 여기에 코드의 할 경우

, 논리는 쉽게 따라 할 수 있어야합니다

public class MyArrayAdapter extends ArrayAdapter<MyModel> { 

    private final ImageFetcher imageFetcher; 

    public MyArrayAdapter(Context ctx, List<MyModel> list) { 
     super(ctx, list); 
     imageFetcher = new ImageFetcher(ctx); 
    } 

    @Override 
    public View getView(int position, View view, ViewGroup parent) { 
     if (view == null) { 
      view = layoutInflater.inflate(m_resourceId, null); 
      ViewHolder holder = new ViewHolder(); 
      holder.titleView = ViewUtils.findViewById(view, R.id.title); 
      holder.iconView = ViewUtils.findViewById(view, R.id.image); 
      view.setTag(holder); 
     } 
     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.iconView.setImageDrawable(null); 
     MyModel item = getItem(position); 
     holder.titleView.setText(item.title); 
     imageFetcher.attachImage(item.iconUrl, holder.iconView); 
     return view; 
    } 

    private static class ViewHolder { 
     TextView titleView; 
     ImageView iconView; 
    } 

} 

또한 생성자에서 개체 목록을 제공하는 대안으로 setContent(...) 방법입니다 확인하십시오. 그리고 물론 <uses-permission android:name="android.permission.INTERNET" />을 선언했는지 확인하십시오.

+0

완벽하게 작동합니다. 감사합니다.] 또한 정말 좋아하는 도서관입니다. 굉장한 것들로 가득 차 있고 그것은 나에게 많은 것을 가르쳐 주므로, 다시 한번 감사드립니다! – masha

관련 문제