android怎样不让view重绘,android – 如何强制重绘listview?

这个问题与其他类似标题略有不同.我不是要更新列表中的数据,我正在尝试更新列表的外观.

我的应用程序基于片段使用支持库.我有一个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并使其无效.无奈之下,我尝试在适配器上调用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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值