Gridview重复图像但不是android中的文本

时间:2015-08-10 05:21:00

标签: java android gridview imageview adapter

ImageView中,我的图片正在被洗牌但不是文字。这是我的getView()方法:

public View getView(int position, View convertView, ViewGroup parent) {
    View v;

    if (convertView == null) {  
        LayoutInflater inflater = (LayoutInflater) mainActivity.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
    v = inflater.inflate(R.layout.item_people, parent, false);
    } else {
        v = (View) convertView;
    }

    TextView textView = (TextView) v.findViewById(R.id.name);
    ImageView imageView = (ImageView) v.findViewById(R.id.image);

    if (list.get(position).getClass() == SearchData.Video.class) {
        SearchData.Video video = (SearchData.Video) list.get(position);
        textView.setText(video.getVideoName());

        if (video.getCoverPicture().length > 0)
            imageView.setBackground(mainActivity.Base64toImage(video.getCoverPicture()[0].getImg()));
    } else if (list.get(position).getClass() == SearchData.Actor.class) {
        SearchData.Actor actor = (SearchData.Actor) list.get(position);
        textView.setText(actor.getFirstName());

        if (actor.getPicture().length > 0)
            imageView.setBackground(mainActivity.Base64toImage(actor.getPicture()[0].getImg()));
    }
    return v;
}

我正在设置演员的图像和文字。当我向下滚动然后向上,图像已经改组,但不是文本。为什么呢?

1 个答案:

答案 0 :(得分:0)

您是否尝试过ViewHolder

通常,当调用getView()方法时,gridview / listview将自动作为更改通知,这就是你的图像在gridview中改变/更改的原因。

因此,尝试使用ViewHolder模式实现Gridview并避免那些改组/重新排序

这是视图持有者模式实现的示例代码。

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

    ViewHolderItem viewHolder;


      // The convertView argument is essentially a "ScrapView" as described is Lucas post 
      // http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/
      // It will have a non-null value when ListView is asking you recycle the row layout. 
      // So, when convertView is not null, you should simply update its contents instead of inflating a new row    layout.

    if(convertView==null){

        // inflate the layout
        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
        convertView = inflater.inflate(layoutResourceId, parent, false);

        // well set up the ViewHolder
        viewHolder = new ViewHolderItem();
        viewHolder.textViewItem = (TextView) convertView.findViewById(R.id.textViewItem);

        // store the holder with the view.
        convertView.setTag(viewHolder);

    }else{
        // we've just avoided calling findViewById() on resource everytime
        // just use the viewHolder
        viewHolder = (ViewHolderItem) convertView.getTag();
    }

    // object item based on the position
    ObjectItem objectItem = data[position];

    // assign values if the object is not null
    if(objectItem != null) {
        // get the TextView from the ViewHolder and then set the text (item name) and tag (item ID) values
        viewHolder.textViewItem.setText(objectItem.itemName);
        viewHolder.textViewItem.setTag(objectItem.itemId);
    }

    return convertView;

}

你的ViewHodler应该是这样的

// ViewHolder.
// caches our TextView
static class ViewHolderItem {
    TextView textViewItem;
}

这与您的问题不完全相同,但您可以按照自己的方式编辑上述逻辑。

希望它有助于:)