Android viewBinder, отображающий изображения на simpleCursorAdapter
Я создал рабочий ViewBinder для использования с моим simpleCursorAdapter, и все работает правильно. Нужные изображения отображаются так, как должны, и т. Но когда я тестировал свой код, я поместил журнал в видоискатель, который отображает критерии отображения изображения. Когда я смотрю на logCat, он показывает две итерации результатов, как показано ниже. (всего пять записей). Который, в свою очередь, создал бы две итерации моих операторов if и показ полученного изображения. Это не проблема с отображением, но это создаст некоторую избыточность в том, что он отобразит изображения в listView дважды.
ЖУРНАЛЬНЫЙ ФАЙЛ:
columnIndex=1 categoryIdentifier = Supplier
columnIndex=1 categoryIdentifier = Customer
columnIndex=1 categoryIdentifier = Other
columnIndex=1 categoryIdentifier = Other
columnIndex=1 categoryIdentifier = Other
columnIndex=1 categoryIdentifier = Supplier
columnIndex=1 categoryIdentifier = Customer
columnIndex=1 categoryIdentifier = Other
columnIndex=1 categoryIdentifier = Other
columnIndex=1 categoryIdentifier = Other
Код для запуска viewBinder выглядит так:
КОД:
private void fillData() {
//The desired columns to be bound:
String[] from = new String[] { ContactsDB.COLUMN_CATEGORY, ContactsDB.COLUMN_LAST_NAME, ContactsDB.COLUMN_FIRST_NAME };
//The XML views that the data will be bound to:
int[] to = new int[] {R.id.contact_icon, R.id.label2, R.id.label};
getLoaderManager().initLoader(0, null, this);
adapter = new SimpleCursorAdapter(this, R.layout.contact_row, null, from, to, 0);
// Set the ViewBinder to alternate the image in the listView
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
// int viewId = view.getId();
int categoryIndex = cursor.getColumnIndexOrThrow(ContactsDB.COLUMN_CATEGORY);
if(columnIndex == categoryIndex)
{
String categoryIdentifier = cursor.getString(columnIndex);
//switch categoryIdentifier
if(categoryIdentifier.equalsIgnoreCase("Supplier")){
displayImage = (ImageView) view;
displayImage.setImageResource(R.drawable.supplier);
}
if(categoryIdentifier.equalsIgnoreCase("Other")){
displayImage = (ImageView) view;
displayImage.setImageResource(R.drawable.other);
}
Log.v("TEST COMPARISON", "columnIndex=" + columnIndex + " categoryIdentifier = " + categoryIdentifier);
return true;
}
return false;
}
});
setListAdapter(adapter);
} // end of fillData
// Sort the names by last name, then by first name
String orderBy = ContactsDB.COLUMN_LAST_NAME + " COLLATE NOCASE ASC"
+ "," + ContactsDB.COLUMN_FIRST_NAME + " COLLATE NOCASE ASC" ;
// Creates a new loader after the initLoader () call
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
//String[] projection = { ContactsDB.ROW_ID, ContactsDB.COLUMN_LAST_NAME, ContactsDB.COLUMN_FIRST_NAME };
String[] projection = { ContactsDB.ROW_ID, ContactsDB.COLUMN_CATEGORY, ContactsDB.COLUMN_LAST_NAME, ContactsDB.COLUMN_FIRST_NAME };
CursorLoader cursorLoader = new CursorLoader(this,
whateverContentProvider.CONTENT_URI, projection, null, null, orderBy);
return cursorLoader;
}
Кто-нибудь знает, почему возникла такая избыточность?
1 ответ
Решение