2015-10-20 33 views
0
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方法。我想獲得每個字母的相應圖片,但輸入了一些東西后。最後一個相應的圖像將只是要返回的圖像。androiod:Arraylist getview與ImageView只返回最後一個數據

我getCount將

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

回答

0

我認爲問題是在你的循環。

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(); 
}  
+0

我已經嘗試過該行的代碼,但是當我嘗試運行項目。它在'if(mAlpha == ALPHA [j])行處有'if(mAlphaSplit [position] == ALPHA [j])'NullPointerException異常' – tin

+0

它表示「StringIndexOutOfBoundsException」 – tin

+0

致命異常:主 10- 20 11:53:58.348 29163-29163/com.app.messaging.messagingapp E/AndroidRuntime:進程:com.app.messaging.messagingapp,PID:29163 10-20 11:53:58.348 29163-29163/com.app .messaging.messagingapp E/AndroidRuntime:java.lang.StringIndexOutOfBoundsException:length = 2; index = 10 – tin

相關問題