android: Arraylist getview与ImageView只返回最后的数据


ArrayList<Message> msg;
public View getView(int position, View convertView, ViewGroup parent) {
    Message message = (Message) this.getItem(position);
    Holder holder;
    if (convertView == null) {
        holder = new Holder();
        convertView = LayoutInflater.from(mContext).inflate(R.layout.activity_list, parent, false);
        holder.imageView = (ImageView) convertView.findViewById(R.id.img);
        convertView.setTag(holder);
    } else {
        holder = (Holder) convertView.getTag();
    }
    mAlphaSplit = new Character[message.getMessage().length()];
    for (int i = 0; i < message.getMessage().length(); i++) {
        mAlphaSplit[i] = new Character(message.getMessage().charAt(i));
        for (int j = 0; j < ALPHA.length; j++) {
            if (mAlphaSplit[i] == ALPHA[j]) {
                holder.imageView.setImageResource(ICONS[j]);
                break;
            }
        }
    }
    LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) holder.imageView.getLayoutParams();
    if (message.isMine()) {
        holder.imageView.setBackgroundResource(R.drawable.bubble_mine);
        lp.gravity = Gravity.RIGHT;
    } else {
        holder.imageView.setBackgroundResource(R.drawable.bubble_not_mine);
        lp.gravity = Gravity.LEFT;
    }
    holder.imageView.setLayoutParams(lp);
    return convertView;
}

这是getview方法。我想得到每个字母对应的图像,但在我输入一些东西之后。最后一个对应的图像将只返回一个。

我getCount

public int getCount() {
    return msg.size();
}

我认为问题出在你的循环。

    mAlphaSplit = new Character[message.getMessage().length()];
    for (int i = 0; i < message.getMessage().length(); i++) {
        mAlphaSplit[i] = new Character(message.getMessage().charAt(i));
        for (int j = 0; j < ALPHA.length; j++) {
            if (mAlphaSplit[i] == ALPHA[j]) {
                holder.imageView.setImageResource(ICONS[j]);
                break;
            }
        }
    }

现在,对于每个视图,您都在使用Alpha搜索mAlphaSplit中的所有字符。它匹配每个字符,但每次得到匹配时,它都会设置imageview。如果你在mAlphaSplit中有['A','B','C']那么首先它与'A'匹配,找到它,然后设置图像,然后再找到'B'匹配,然后是'C'。因此,C的图像被设置为它最终设置的图像。我认为不需要外部循环,不如像下面这样使用位置。

        char mAlpha = message.getMessage().charAt(position);
        for (int j = 0; j < ALPHA.length; j++) {
            if (mAlpha == ALPHA[j]) {
                holder.imageView.setImageResource(ICONS[j]);
                break;
            }
        }

和getCount

public int getCount() {
    if(message==null||message.getMessage()==null) return 0;
    return message.getMessage().size();
}    

最新更新