Как переопределить CursorAdapter bindView

Я пытаюсь отобразить информацию из Cursor в ListView , каждая строка содержит ImageView и TextView . У меня есть CustomCursorAdapter расширяющий CursorAdapter , в bindView я оцениваю данные с помощью курсора и на основе этого устанавливают изображения и текст представлений.

Когда я запускаю приложение, ListView отображает правильное количество строк, но они пусты. Я знаю, что что-то пропустил, переопределив bindView, но я не уверен, что.

Любая помощь будет принята с благодарностью.

 private class CustomCursorAdapter extends CursorAdapter { public CustomCursorAdapter() { super(Lmw.this, monitorsCursor); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { LayoutInflater layoutInflater = getLayoutInflater(); return layoutInflater.inflate(R.layout.row, null); } @Override public void bindView(View view, Context context, Cursor cursor) { try { int monitorNameIndex = cursor.getColumnIndexOrThrow(DbAdapter.MONITORS_COLUMN_MONITOR_NAME); int resultTotalResponseTimeIndex = cursor.getColumnIndexOrThrow(DbAdapter.RESULTS_COLUMN_TOTAL_RESPONSE_TIME); String monitorName = cursor.getString(monitorNameIndex); int warningThreshold = cursor.getInt(resultTotalResponseTimeIndex); String lbl = monitorName + "\n" + Integer.toString(warningThreshold) + " ms"; TextView label = (TextView) view.findViewById(R.id.label); label.setText(lbl); ImageView icon = (ImageView)view.findViewById(R.id.icon); if(warningThreshold < 1000) { icon.setImageResource(R.drawable.ok); } else { icon.setImageResource(R.drawable.alarm); } } catch (IllegalArgumentException e) { // TODO: handle exception } } } 

Метод bindView() выглядит нормально.

Попробуйте заменить метод newView () :

 @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { return mInflater.inflate(R.layout.row, parent, false); } 

И, по соображениям производительности:

  • Переместить getLayoutInflater() в конструкторе
  • То же самое со всеми cursor.getColumnIndexOrThrow() , как уже сказано в
    Комментарии
  • Используйте StringBuilder для создания вашего lbl- текста
  • Вам не нужно делать Integer.toString (warningThreshold) … просто используйте warningThreshold

Позже отредактируйте : Единственная разница между вашим методом inflate() и тем, который я предложил, заключается в том, что он создает параметры макета, соответствующие родительскому элементу.