简体   繁体   中英

ArrayAdater getView “caching” convertView

I have a problem when "caching" my convertView in my Custom Adapters getView method. When using "caching" like

if (convertView == null) ...

my verifiedView is sometimes displayed even when the user is not verified. When removing the if construct and just use row = convertView; everything works as expected. Any idea how to fix this?

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

    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(resource, parent, false);
    } else {
        row = convertView;
    }

     UserProfile user = users.get(position);
    // get views
    TextView usernameView = (TextView) row.findViewById(R.id.username);
    ImageView avatarView = (ImageView) row.findViewById(R.id.avatar);
    ImageView verifiedView = (ImageView) row.findViewById(R.id.verified);

    // check if user has an custom avatar
    if (!user.getAvatar().isEmpty()) {
        // now check if we already downloaded the avatar
        InputStream is = AvatarHandler.getAvatar(this.context, user.getID());
        if (is != null) {
            Bitmap bmp = BitmapFactory.decodeStream(is);
            System.out.println("Avatar already downloaded.");
            avatarView.setImageBitmap(bmp);
        }
    }
    else {
        // set default avatar
        avatarView.setImageResource(R.drawable.avatar);         
    }

    // set username
    usernameView.setText(user.getName());

    // set verified
    if (user.isVerified())
        verifiedView.setVisibility(View.VISIBLE);

    return row;
}

You should hide verifiedView when the user is not verified:

// set verified
if (user.isVerified()) {
        verifiedView.setVisibility(View.VISIBLE);
} else {
        verifiedView.setVisibility(View.GONE);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM