视图持有人 + 列表视图滚动随机播放文本



我知道这在StackOverflow上被反复问过,但是我已经经历了一堆问题/答案,无法真正弄清楚我的代码有什么问题。这是我的自定义适配器中的 getView 代码:

@Override public View getView(int position, View view, ViewGroup parent) {
    ViewHolder holder;
    if (view == null) {
        view = LayoutInflater.from(context).inflate(R.layout.friend_list_item, parent, false);
        holder = new ViewHolder();
        holder.image = (ImageView) view.findViewById(R.id.friend_pic);
        holder.text = (TextView) view.findViewById(R.id.friend_name);
        holder.num_classes = (TextView) view.findViewById(R.id.shared_classes);         
        holder.text.setTypeface(face);
        holder.num_classes.setTypeface(lightface);
        view.setTag(holder);
    } else {
        holder = (ViewHolder) view.getTag();
    }
    // Build Shared Classes text
    FriendDataHolder fdh = getItem(position);
    String classesText = fdh.getClassesText();      
    if(classesText != "") holder.num_classes.setText(classesText);
    holder.text.setText(fdh.getName());

    // Trigger the download of the URL asynchronously into the image view.
    String imageUrl= "http://graph.facebook.com/" + getItemId(position) + "/picture?type=square";
    Picasso.with(context)
    .load(imageUrl)
    .placeholder(R.drawable.fb_default)
    .into(holder.image);
    return view;
}

我无法弄清楚的有趣事情是,我的图像/名称都没有混淆,而只有类文本。任何帮助将不胜感激!

if(classesText != "") holder.num_classes.setText(classesText);// this is the problem, 
如果您为项目 1 设置了一个值,例如"test",并且第 10 项

正在重用视图,如果 classText 为空或 null,则 u 不会更新该值,因此它将显示第 10 项的"test"也有 else 情况来设置空文本或默认值

if(classesText != "") holder.num_classes.setText(classesText); else {holder.num.classes.setText("")}

你应该替换这个

if(classesText != "") holder.num_classes.setText(classesText);

if(classesText != "") {holder.num_classes.setText(classesText);} 
else {holder.num.classes.setText("")}

试试这种方式

@Override
    public View getView(int position, View view, ViewGroup parent) {
          ViewHolder holder;
            if ((view == null) || (view.getTag() == null)) { // UPDATE HERE
                view = LayoutInflater.from(context).inflate(R.layout.friend_list_item, parent, false);
                holder = new ViewHolder();
                holder.image = (ImageView) view.findViewById(R.id.friend_pic);
                holder.text = (TextView) view.findViewById(R.id.friend_name);
                holder.num_classes = (TextView) view.findViewById(R.id.shared_classes);         
                holder.text.setTypeface(face);
                holder.num_classes.setTypeface(lightface);
                view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }
            // Build Shared Classes text
            FriendDataHolder fdh = getItem(position);
            String classesText = fdh.getClassesText();      
            if(classesText != "") holder.num_classes.setText(classesText);
            holder.text.setText(fdh.getName());

            // Trigger the download of the URL asynchronously into the image view.
            String imageUrl= "http://graph.facebook.com/" + getItemId(position) + "/picture?type=square";
            Picasso.with(context)
            .load(imageUrl)
            .placeholder(R.drawable.fb_default)
            .into(holder.image);
            view.setTag(holder); // updata here
            return view;

    }

最新更新