This question is a little different from others of a similar title. I am not trying to update the data in the list, I am trying to update the look of the list.
My app is fragment based using the support library. I have a PreferenceActivity where I allow the user to set the colors they would like for the text in a list (the adapter reads the preference and sets the colors). This is working as expected for the most part.
The issue I'm having is as follows. When I have the list on the screen (it is a ListFragment) and pull up the menu, choose Preferences and make a change to the color preference. Upon return to the list from the PreferenceActivity, I cannot seem to get the list to redraw itself with the new color specified.
If I navigate away from the list and come back to it, it is regenerated with the new color.
I am trying to use onResume
to make the change. The code I currently have (that doesn't appear to do anything to the list, but changes the header color as it should):
@Override
public void onResume() {
super.onResume();
header.setTextColor(MyApplication.header);
line.setBackgroundColor(MyApplication.header_line);
subheader.setTextColor(MyApplication.header);
getListView().invalidateViews();
}
I have tried invalidateViews
and invalidate
. In desperation I tried calling notifyDataSetChanged
on the adapter even though there was no change to the data itself. Nothing seems to work.
Am I missing something obvious, or is there no way to do this?
EDIT
The 'getView` method from my adapter:
@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
. The method isMyApplication.setPrefs
. sigh – Draper