我有一個ListView超過100個項目,每個項目有不同的圖像。圖像已經在可繪製文件夾中,所以我沒有向任何服務器請求。在緩存中存儲ListView圖像
當我滾動ListView,因爲手機必須再次渲染每個圖像,有時它會變得有點慢,看起來像低fps。出於測試目的,我爲所有項目使用了相同的圖像,並且滾動效果更好,所以我認爲問題確實是呈現所需的不同圖像。
我的問題是:我可以將這些圖像存儲在緩存或其他東西,使這個滾動窒息?這裏是我的ListView適配器代碼:
public class AdapterItens extends BaseAdapter implements ListAdapter {
private final JSONArray jsonArray;
static class ViewHolder {
ImageView itemAvatar;
TextView itemName;
TextView itemId;
}
public AdapterItens(JSONArray jsonArray) {
this.jsonArray = jsonArray;
}
@Override
public int getCount() {
return jsonArray.length();
}
@Override
public JSONObject getItem(int position) {
return jsonArray.optJSONObject(position);
}
@Override
public long getItemId(int position) {
JSONObject jsonObject = getItem(position);
return jsonObject.optLong("id");
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView == null) {
final LayoutInflater inflater = LayoutInflater.from(Controller.getContext());
convertView = inflater.inflate(R.layout.item_layout, parent, false);
viewHolder = new ViewHolder();
viewHolder.itemAvatar = (ImageView) convertView.findViewById(R.id.avatar_item);
viewHolder.itemName = (TextView) convertView.findViewById(R.id.name_item);
viewHolder.itemId = (TextView) convertView.findViewById(R.id.id_item);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final JSONObject jsonData = getItem(position);
viewHolder.itemAvatar.setImageResource(Controller.getContext().getResources().getIdentifier(jsonData.getString("itemAvatar"), "drawable", Controller.getContext().getPackageName()));
viewHolder.itemName.setText(jsonData.getString("itemName"));
viewHolder.itemId.setText(jsonData.getString("itemId"));
return convertView;
}
}
因爲適配器預計現在列表,而不是OS JSON數組,林不知道這一行是如何工作的: @覆蓋 衆長getItemId(INT位置){ 回報yourObjectsList.get(位置).ID; } 這裏出現錯誤。 – Ravers
錯誤描述說什麼? –
對不起,錯誤是:「無法解析符號」ID「」 – Ravers