Tôi có LinearLayout mà tôi muốn thay đổi màu nền khi một trong các khung nhìn con của nó (một ImageButton) được nhấp. Tôi có thể làm điều này, nhưng không phải ngay lập tức - sự thay đổi không xảy ra trên màn hình cho đến sau này (tôi nghĩ trong một cuộc gọi onResume). Tôi muốn tìm hiểu cách buộc bố cục vẽ lại sau khi nền được đặt, trước khi dòng mã tiếp theo thực thi. Đây là phương thức onClick của OnClickListener của tôi cho nút:Cách ép buộc xem lại để vẽ lại ngay trước khi dòng mã tiếp theo được thực thi
public void onClick(View v) {
LinearLayout parentLayout = (LinearLayout) v.getParent();
parentLayout.setBackgroundResource(R.color.my_color);
SystemClock.sleep(1000); //ms
}
Lệnh ngủ nằm trong đó để kiểm tra xem việc vẽ lại có xảy ra trước hoặc sau nó. Kết quả: sau. Hầu hết các câu hỏi về chủ đề này (như here và here) nói để sử dụng invalidate() trên chế độ xem. Tôi đã sử dụng các lệnh parentLayout.invalidate();
, parentLayout.postInvalidate();
và parentLayout.refreshDrawableState();
ở giữa các đường nền và dòng ngủ, tất cả đều không có sẵn. Việc vẽ lại vẫn xảy ra sau lệnh ngủ. Bất cứ ai có thể cho tôi biết làm thế nào để làm cho nó xảy ra ngay lập tức?
Thông tin có thể hữu ích khác: LinearLayout được gắn với các hàng của một ListView và OnClickListener ở trên là trong một lớp tùy chỉnh mở rộng SimpleCursorAdapter, không phải trong chính hoạt động đó. (Bằng cách này tôi có thể thiết lập một người nghe cho mỗi hàng trong ListView.)
Dường như bạn sẽ không nhận được câu trả lời chính xác cho điều này ít nhất là tôi không thể tìm thấy câu trả lời. Bạn có thể cho chúng tôi biết tại sao bạn cần xem lại để được vẽ lại ngay lập tức? Có thể sẽ có các giải pháp khác để giải quyết vấn đề. – manjusg
@manjusg Những gì tôi đang cố gắng chỉ là những gì thường được thực hiện với bộ chọn nền của chế độ xem trong xml (nền ngắn thay đổi màu khi được nhấn ngay trước khi thực hiện gọi lại), ngoại trừ việc tôi muốn thay đổi nền của chế độ xem khác với nút được nhấn - cụ thể là bố cục chứa nút và cũng là chế độ xem văn bản. – pvans
@manjusg Các hàng trong listview của tôi có văn bản và nút xóa, và tôi muốn toàn bộ hàng, bao gồm cả textview, được đánh dấu ngắn trước khi nó bị xóa và xóa, để người dùng có một số phản hồi mà anh ta đã nhấn hàng anh ta định làm. Có lẽ có một số cách để xem qua liên kết với một bộ chọn trong xml? – pvans