3

ボレーライブラリを使用して、インターネットから画像をロードしています。リストビューがあり、一部の行はボレーのライブラリ「NetworkImageView」を使用してロードされ、他の行は静的リソースによってロードされます。

画像が間違って割り当てられた行があるため、何かがおかしいようです。

私は ArrayAdapter を持っています。ここに私の getView メソッドがあります:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    House house = houses.get(position);

    if (convertView == null) {
        LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater();
        convertView=inflater.inflate(this.layout, parent, false);

        holder=new ViewHolder();
        holder.image=(NetworkImageView) convertView.findViewById(R.id.imageView1);
        holder.name=(TextView) convertView.findViewById(R.id.housename_listelement_houseslist);
        holder.rating=(TextView) convertView.findViewById(R.id.houserating_listelement_houseslist);         

        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    if(house.getUrl()!=null){
        String url=house.getUrl();
        holder.image.setImageUrl(url, ((TopHousesListViewPager)getContext()).mImageLoader);
    }else{
        holder.image.setBackgroundResource(R.drawable.defaulthouse);
    }


    holder.name.setText(house.getName());
    holder.rating.setText(String.format("%.2f",house.getRate()));
return convertView;
}

ご覧のとおり、オブジェクトに URL がある場合にのみインターネットからの画像を表示していますが、オブジェクトに URL がなく、画像が他の行からのものである行を探しています...

アドバイス?

ありがとうございました!

4

2 に答える 2

10

@Selvinが言ったように:ホルダーを取得した後、毎回画像のURLをリセットする必要があります:

    } else {
        holder = (SuggestionViewHolder) convertView.getTag();
        holder.image.setImageUrl(null, imageLoader);
    }

    if(house.getUrl()!=null){
       String url=house.getUrl();
       holder.image.setImageUrl(url, ((TopHousesListViewPager)getContext()).mImageLoader);
    } else {
       holder.image.setBackgroundResource(R.drawable.defaulthouse);
    } 

これは私にとってはうまくいきました。

于 2014-01-29T22:24:50.830 に答える
3

getTagAndroid 4.0+で修正済みの最新の ViewHolder/getView パラダイムを使用している場合は、SparseArrayこの問題を解決する方法を次に示します。

 @Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) {
        convertView = LayoutInflater.from(context)
                .inflate(R.layout.mLayout, parent, false);
    }

    );

            NetworkImageView mView = ViewHolder.get(convertView, R.id.mview);
           mView.setImageUrl(null, mImageLoader);

この時点で imageUrl を null に設定し、後で getView の現在の位置にリスト オブジェクトをロードした後、そこに適切な imageUrl を設定します。

于 2014-02-25T16:27:50.923 に答える