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方法。我想得到每个字母对应的图像,但在我输入一些东西之后。最后一个对应的图像将只返回一个。
我getCountpublic 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();
}