0
我有我的列表視圖,我使用視圖持有人模式的自定義基礎適配器。我必須動態更改多個圖像的來源。但是當我更換其中一幅圖像後,幾幅滾動整幅圖像發生了變化。如果我只是刪除視圖持有人模式,一切都很好。setImageResource()同時使用視圖持有人模式與列表視圖
我喜歡搜索一些問題:Facing critical issue: Toggle image source inside Listview using ViewHolder Pattern
但我無法找到一個合適的辦法一舉兩得。
這是我的getview()函數。
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
// if (convertView == null) {
holder = new ViewHolder();
convertView = this.inflater.inflate(R.layout.list_row2, parent, false);
// For every single item placed on XML
// Holder must be updated here
holder.codeName = (TextView) convertView.findViewById(R.id.codeName);
holder.level = (TextView) convertView.findViewById(R.id.level);
holder.pt1 = (TextView) convertView.findViewById(R.id.pt1Value);
holder.pt2 = (TextView) convertView.findViewById(R.id.pt2Value);
holder.tt3 = (TextView) convertView.findViewById(R.id.tt3Value);
holder.tt4 = (TextView) convertView.findViewById(R.id.tt4Value);
holder.lastUpdate = (TextView) convertView.findViewById(R.id.lastUpdate);
holder.status = (ImageView) convertView.findViewById(R.id.status);
convertView.setTag(holder);
// }
// else {
// holder = (ViewHolder) convertView.getTag();
// }
// Formatting level
SingleSystem temp = sys.get(position);
temp.seq1 = temp.seq1.replace("," , ".");
Float tempLevel = Float.parseFloat(temp.seq1);
Integer level = Math.round(tempLevel);
//Check if there is an alert on system
if(temp.seq13.contains("1") || temp.seq14.contains("1") ||
temp.seq16.contains("1") || temp.seq30.contains("1") || temp.seq31.contains("1") || temp.seq32.contains("1") ||
temp.seq45.contains("1") )
{
holder.status.setImageResource(R.drawable.process_warning); //If an alert, change running picture
}
//Set background color according to level
if(level<=15){
holder.level.setBackgroundColor(Color.rgb(255,17,0));
holder.status.setImageResource(R.drawable.offline);
}
else if(level>15 && level <30){
holder.level.setBackgroundColor(Color.rgb(255,128,0));
}
else{
holder.level.setBackgroundColor(Color.rgb(66,213,4));
}
// Check Time Out
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
try {
Date serverTime = dateFormat.parse(temp.serverTime);
Date communicationTime = dateFormat.parse(temp.communicationDate);
long diff = serverTime.getTime() - communicationTime.getTime();
diff = diff/1000;
diff = diff/60;
Integer cOut = Integer.parseInt(temp.communicationTimeOut);
if(diff > cOut){
holder.status.setImageResource(R.drawable.offline);
}
}
catch (Exception e){
e.printStackTrace();
}
return convertView;
}
正如我所說如果我刪除if(convertView == null)部分,一切都是okey。現在我只有16行,但可能會增加。這將是未來的重大性能問題嗎?我怎樣才能改變我的代碼使用視圖持有者模式?
感謝您的回答。
就是這樣。非常感謝你。 – SinanAy 2015-02-12 08:29:08