Câu hỏi này hơi khác so với những người khác có tên tương tự. Tôi không cố gắng cập nhật dữ liệu trong danh sách, tôi đang cố gắng cập nhật xem của danh sách.Làm cách nào để buộc vẽ lại danh sách xem?
Ứng dụng của tôi là phân đoạn dựa trên thư viện hỗ trợ. Tôi có một PreferenceActivity nơi tôi cho phép người dùng thiết lập các màu sắc mà họ muốn cho văn bản trong một danh sách (bộ điều hợp đọc sở thích và thiết lập màu sắc). Điều này làm việc như mong đợi cho hầu hết các phần.
Sự cố tôi gặp phải là như sau. Khi tôi có danh sách trên màn hình (nó là một ListFragment) và kéo lên trình đơn, chọn Preferences và thực hiện một sự thay đổi để sở thích màu sắc. Khi trở về danh sách từ PreferenceActivity, tôi dường như không thể lấy danh sách để vẽ lại chính nó với màu mới được chỉ định.
Nếu tôi điều hướng khỏi danh sách và quay trở lại, danh sách sẽ được tạo lại bằng màu mới.
Tôi đang cố gắng sử dụng onResume
để thực hiện thay đổi. Mã Tôi hiện có (không xuất hiện để làm bất cứ điều gì vào danh sách, nhưng thay đổi màu sắc tiêu đề như mong muốn):
@Override
public void onResume() {
super.onResume();
header.setTextColor(MyApplication.header);
line.setBackgroundColor(MyApplication.header_line);
subheader.setTextColor(MyApplication.header);
getListView().invalidateViews();
}
Tôi đã thử invalidateViews
và invalidate
. Trong tuyệt vọng, tôi đã thử gọi notifyDataSetChanged
trên bộ điều hợp mặc dù không có thay đổi nào đối với dữ liệu. Không có gì có vẻ hiệu quả.
Tôi có thiếu điều gì đó hiển nhiên hay không có cách nào để thực hiện việc này?
EDIT
Các 'getView` phương pháp từ bộ chuyển đổi của tôi:
@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);
}
Vâng ... điều này đã chỉ ra cách tôi tìm ra vấn đề ... và tôi cảm thấy vô cùng ngu ngốc. Tôi đã gọi 'MyApplication.setPreferences'. Phương thức này là 'MyApplication.setPrefs'. *thở dài* – Barak