Этот вопрос немного отличается от других аналогичных заголовков. Я не пытаюсь обновить данные в списке, я пытаюсь обновить вид из списка.Как заставить перерисовать список?
Мое приложение основано на фрагментах, используя библиотеку поддержки. У меня есть PreferenceActivity, где я разрешаю пользователю устанавливать цвета, которые они хотели бы использовать для текста в списке (адаптер читает предпочтение и устанавливает цвета). Это работает по большей части.
Проблема, которую я имею, заключается в следующем. Когда у меня есть список на экране (это ListFragment) и вытащите меню, выберите «Настройки» и внесите изменения в предпочтение цвета. По возвращении в список из PreferenceActivity я не могу заставить список перерисовать себя с указанным новым цветом.
Если я перехожу от списка и вернусь к нему, он будет регенерирован новым цветом.
Я пытаюсь использовать onResume
, чтобы внести изменения. Код, который я в настоящее время (что не кажется, сделать что-нибудь к списку, но меняет цвет заголовка, как это должно быть):
@Override
public void onResume() {
super.onResume();
header.setTextColor(MyApplication.header);
line.setBackgroundColor(MyApplication.header_line);
subheader.setTextColor(MyApplication.header);
getListView().invalidateViews();
}
Я попытался invalidateViews
и invalidate
. В отчаянии я попробовал называть notifyDataSetChanged
на адаптере, даже если не было никаких изменений в самих данных. Ничто не работает.
Я пропустил что-то очевидное или нет способа сделать это?
EDIT
«getView` метод из моего адаптера:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = View.inflate(context, layout, null);
View row = convertView;
c.moveToPosition(position);
TextView first = (TextView) convertView.findViewById(R.id.ListItem1);
TextView second = (TextView) convertView.findViewById(R.id.ListItem2);
TextView third = (TextView) convertView.findViewById(R.id.ListItem3);
TextView fourth = (TextView) convertView.findViewById(R.id.ListItem4);
DecimalFormat df = new DecimalFormat("0.00");
Double hold = Double.valueOf(c.getString(3));
Double qty = Double.valueOf(c.getString(1));
Double total = hold * qty;
String color = "#FF00FF";
first.setText(c.getString(2));
first.setTextColor(MyApplication.shoplistitem_name);
second.setText(c.getString(4));
second.setTextColor(MyApplication.shoplistitem_desc);
third.setText(c.getString(1));
third.setTextColor(MyApplication.shoplistitem_qty);
fourth.setText("$" + df.format(total));
fourth.setTextColor(MyApplication.shoplistitem_desc);
if (strikethroughState[position] == 1) {
first.setPaintFlags(first.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
second.setPaintFlags(second.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
third.setPaintFlags(third.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
fourth.setPaintFlags(third.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
row.setBackgroundColor(MyApplication.shoplistitem_checked);
} else {
first.setPaintFlags(first.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
second.setPaintFlags(second.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
third.setPaintFlags(third.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
fourth.setPaintFlags(third.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
row.setBackgroundResource(R.color.black);
}
return (row);
}
Ну ... это указывало на то, как я нахожу проблему ... и я чувствую себя невероятно глупо. Я называл «MyApplication.setPreferences». Этот метод является «MyApplication.setPrefs». *вздох* – Barak