Я борюсь со странной проблемой на Android.
Я получил ListView с настраиваемым представлением элементов списка. Этот пользовательский вид содержит ProgressBar и RadioButton. Вот хороший скриншот .
Всякий раз, когда я проверяю радио и запускаю режим действия, весь индикатор выполнения исчезает. Вот еще один скриншот .
Если ориентация экрана изменится или я открою клавиатуру, все вернется на круги своя.
Теперь я видел много сообщений о проблемах такого рода, связанных с представлениями об утилизации адаптера. Однако вызов ListView.invalidateViews
не имеет никакого эффекта. Есть ли способ принудительно обновить все ListView?
Вот код моего адаптера:
public class SimpleContactsCursorAdapter extends SimpleCursorAdapter {
public SimpleContactsCursorAdapter(Context context, int layout, Cursor c, String[] from,
int[] to, int flags) {
super(context, layout, c, from, to, flags);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView nameView = (TextView) view.findViewById(R.id.contact_item_name);
TextView callView = (TextView) view.findViewById(R.id.contact_call_text);
ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.contact_item_progress);
String name = cursor.getString(Contact.Columns.COLUMN_INDEX_NAME);
int delta = cursor.getInt(Contact.Columns.COLUMN_INDEX_DELTA);
String callString;
nameView.setText(name);
if (delta >= 0) {
callString = getString(R.string.call_in, delta);
}
else {
callString = getString(R.string.days_late, Math.abs(delta));
progressBar.setProgressDrawable(mResources.getDrawable(R.drawable.late_progress_bar));
}
callView.setText(callString);
progressBar.setProgress(Math.abs(delta));
}
};