Решение 1:
Вы должны проверить индекс столбца в viewbinder
:
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
if (columnIndex == cursor.getColumnIndexOrThrow(**??**)) // 0 , 1 , 2 ??
{
sign = (TextView) view;
SharedPreferences currency = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String currency1 = currency.getString("Currency", "$");
sign.setText(currency1);
return true;
}
return false;
}
Обратите внимание, что индекс столбца - это индекс DBcolumn длявалюта / индекс столбца в любом источнике данных.
Решение 2:
Вероятно, вы определяете int[]
для полей, которые нужно связать св вашем listview
, например:
// and an array of the fields we want to bind those fields to
int[] to = new int[] { R.id.field1, R.id.field2, R.id.Currency };
SimpleCursorAdapter entries = new SimpleCursorAdapter(this, R.layout.row, cursor, from, to);
... Условно вы можете просто передать 0
вместо идентификаторов макета полей, которые вы не хотите привязывать / показывать.
int[] to = new int[] { 0, 0, R.id.Currency };
Таким образом, будет привязано только поле Валюта.
Кроме того, причина, по которой вы получаете принудительное закрытие , заключается в том, что технически в вашем contentView * 1033 нет single text65
* но много .Вы не можете получить к нему доступ с основного уровня макета.Он уникален только в пределах одной строки.
Обновление:
Решение 3:
Проверьте id
представления в ViewBinder
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int viewId = view.getId();
Log.v("ViewBinder", "columnIndex=" + columnIndex + " viewId = " + viewId);
if(viewId == R.id.text65)
{
sign = (TextView) view;
SharedPreferences currency = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String currency1 = currency.getString("Currency", "$");
sign.setText(currency1);
return true;
}
return false;
}
Не могли бы вы попробовать это?
Полезный совет: вы можете использовать Log.v
для проверки определенных значений в вашем кодебез необходимости отладки.
Надеюсь, это поможет.