这个问题与其他类似标题的问题略有不同。我不是要更新列表中的数据,而是要更新列表的外观。
我的应用程序是基于片段的,使用支持库。我有一个 PreferenceActivity,我允许用户在列表中设置他们想要的文本颜色(适配器读取首选项并设置颜色)。这在大多数情况下都按预期工作。
我遇到的问题如下。当我在屏幕上有列表(它是 ListFragment)并拉出菜单时,选择 Preferences 并更改颜色首选项。从 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
适配器,即使数据本身没有变化。似乎没有任何效果。
我错过了一些明显的东西,还是没有办法做到这一点?
编辑
我的适配器中的“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);
}