我有一个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