【发布时间】:2018-08-23 09:51:33
【问题描述】:
我目前正在编写一个应用程序,该应用程序需要在 ListView 中设置图像,具体取决于我的数据库中的条目。
我通过我的customCursorAdapter 的bindView() 方法直接通过一个switch-case 实现了这一点。由于bindView 经常被调用,我的ListView 开始结结巴巴,一切都变慢了。有没有办法“外包”这个数据库比较?这是我的源代码:
public class customCursorAdapter extends CursorAdapter {
public customCursorAdapter(Context context, Cursor cursor){
super(context, cursor, 0);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.layout_listitems, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Find fields to populate in inflated template
TextView brand = (TextView) view.findViewById(R.id.listBrand);
TextView model = (TextView) view.findViewById(R.id.listModel);
TextView lastMoved = (TextView) view.findViewById(R.id.dateContent);
TextView lastCharged = (TextView) view.findViewById(R.id.lastChargedContent);
ImageView brandPhoto = (ImageView) view.findViewById(R.id.brandImage);
// Extract properties from cursor
String brandList = cursor.getString(cursor.getColumnIndexOrThrow("Brand"));
String modelList = cursor.getString(cursor.getColumnIndexOrThrow("Model"));
String lastMovedList = cursor.getString(cursor.getColumnIndexOrThrow("LastMoved"));
String lastChargedList = cursor.getString(cursor.getColumnIndexOrThrow("LastCharge"));
switch(brandList){
case "Ferrari":
brandPhoto.setImageResource(R.drawable.ferrari);
break;
case "Porsche":
brandPhoto.setImageResource(R.drawable.porsche);
break;
case "VW":
case "Volkswagen":
brandPhoto.setImageResource(R.drawable.volkswagen);
break;
case "Mini":
brandPhoto.setImageResource(R.drawable.mini);
break;
case "Audi":
brandPhoto.setImageResource(R.drawable.audi);
break;
case "Aston Martin":
brandPhoto.setImageResource(R.drawable.aston);
break;
case "Alpina":
brandPhoto.setImageResource(R.drawable.alpina);
break;
case "Jeep":
brandPhoto.setImageResource(R.drawable.jeep);
break;
case "Bentley":
brandPhoto.setImageResource(R.drawable.bentley);
break;
case "Dodge":
brandPhoto.setImageResource(R.drawable.dodge);
break;
case "Fiat":
brandPhoto.setImageResource(R.drawable.fiat);
break;
case "Ford":
brandPhoto.setImageResource(R.drawable.ford);
break;
case "Lexus":
brandPhoto.setImageResource(R.drawable.lexus);
break;
case "Mercedes":
brandPhoto.setImageResource(R.drawable.mercedes);
break;
case "Maybach":
brandPhoto.setImageResource(R.drawable.maybach);
break;
case "Peugeot":
brandPhoto.setImageResource(R.drawable.peugeot);
break;
case "Skoda":
case "Škoda":
brandPhoto.setImageResource(R.drawable.skoda);
break;
case "Rolls Royce":
brandPhoto.setImageResource(R.drawable.rolls);
break;
case "Smart":
brandPhoto.setImageResource(R.drawable.smart);
break;
case "Opel":
brandPhoto.setImageResource(R.drawable.opel);
break;
case "Nissan":
brandPhoto.setImageResource(R.drawable.nissan);
break;
case "Alfa Romeo":
brandPhoto.setImageResource(R.drawable.alfa);
break;
case "BMW":
brandPhoto.setImageResource(R.drawable.bmw);
break;
case "Seat":
brandPhoto.setImageResource(R.drawable.seat);
break;
case "Lamborghini":
brandPhoto.setImageResource(R.drawable.lamborghini);
break;
default: brandPhoto.setImageResource(R.drawable.ic_directions_carhd);
}
// Populate fields with extracted properties
brand.setText(brandList);
model.setText(modelList);
lastMoved.setText(lastMovedList);
lastCharged.setText(lastChargedList);
}
}
【问题讨论】:
-
使用 ViewHolder 。对于图像,请使用预填充集合。
标签: java android performance switch-statement android-cursoradapter