У меня есть ListActivity, в котором я показываю некоторые записи. После того, как запись выбрана, я показываю другую активность с содержанием записи. Я хотел бы, когда я вернусь обратно к ListActivity, чтобы непрочитанные записи имели цвет, отличный от прочитанных.
У меня есть база данных, в которой хранятся записи, и когда я выбираю одну, поле базы данных COLUMN_READ обновляется.
У меня есть собственный ListAdapter:
public class CustomListAdapter extends SimpleCursorAdapter{
private Context context;
private int layout;
public CustomListAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
this.context = context;
this.layout = layout;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Cursor c = getCursor();
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(layout, parent, false);
int titleCol = c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_TITLE);
int authorCol=c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_AUTHOR_NAME);
int readCol= c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_READ);
String title = c.getString(titleCol);
String author = c.getString(authorCol);
long read= c.getLong(readCol);
TextView name_text = (TextView) v.findViewById(R.id.title);
if (name_text != null) {
name_text.setText(title);
}
TextView content_text = (TextView) v.findViewById(R.id.subtitle);
if (content_text != null) {
content_text.setText(author);
}
if (read!=0){
name_text.setBackgroundColor(Color.GRAY);
}
return v;
}
@Override
public void bindView(View v, Context context, Cursor c) {
int titleCol = c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_TITLE);
int authorCol=c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_AUTHOR_NAME);
int readCol= c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_READ);
String title = c.getString(titleCol);
String author = c.getString(authorCol);
long read= c.getLong(readCol);
TextView name_text = (TextView) v.findViewById(R.id.title);
if (name_text != null) {
name_text.setText(title);
}
TextView content_text = (TextView) v.findViewById(R.id.subtitle);
if (content_text != null) {
content_text.setText(author);
}
if (read!=0){
name_text.setBackgroundColor(Color.GRAY);
}
}
}
И что я делаю, это:
CustomListAdapter present = new CustomListAdapter(context,
R.layout.atom_list_row, loadingCursor, new String[] {DataBaseSchema.EntrySchema.COLUMN_TITLE,DataBaseSchema.EntrySchema.COLUMN_AUTHOR_NAME, DataBaseSchema.EntrySchema.COLUMN_READ}, new int[]{R.id.title,R.id.subtitle,R.id.row_container});
setListAdapter(present);
Проблема в том, что выделенные записи не отображаются правильно, и я не понимаю, почему. Цвет фона на самом деле меняется для выбранной записи, но также и для некоторых других, это кажется случайным, а также, когда я прокручиваю другие записи, меняют их цвет.
Это ошибка Android? Есть ли обходной путь, или я что-то упустил?
Заранее спасибо ..
EDIT
Я нашел решение !!!!
Я добавил v.refreshDrawableState();
в конце моего кода.
Этот код работает:
public class CustomListAdapter extends SimpleCursorAdapter{
private Context context;
private int layout;
public CustomListAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
this.context = context;
this.layout = layout;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Cursor c = getCursor();
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(layout, parent, false);
int titleCol = c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_TITLE);
int authorCol=c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_AUTHOR_NAME);
int readCol= c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_READ);
String title = c.getString(titleCol);
String author = c.getString(authorCol);
long read= c.getLong(readCol);
TextView name_text = (TextView) v.findViewById(R.id.title);
if (name_text != null) {
name_text.setText(title);
}
TextView content_text = (TextView) v.findViewById(R.id.subtitle);
if (content_text != null) {
content_text.setText(author);
}
if (read!=0){
v.setBackgroundColor(Color.GRAY);
}
else v.setBackgroundColor(Color.BLACK);
v.refreshDrawableState();
return v;
}
@Override
public void bindView(View v, Context context, Cursor c) {
int titleCol = c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_TITLE);
int authorCol=c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_AUTHOR_NAME);
int readCol= c.getColumnIndex(DataBaseSchema.EntrySchema.COLUMN_READ);
String title = c.getString(titleCol);
String author = c.getString(authorCol);
//long read= c.getLong(readCol);
TextView name_text = (TextView) v.findViewById(R.id.title);
if (name_text != null) {
name_text.setText(title);
}
TextView content_text = (TextView) v.findViewById(R.id.subtitle);
if (content_text != null) {
content_text.setText(author);
}
//LinearLayout linear =(LinearLayout) v.findViewById(R.id.row_container);
if (c.getLong(readCol)!=0){
v.setBackgroundColor(Color.GRAY);
}else v.setBackgroundColor(Color.BLACK);
v.refreshDrawableState();
}
}