2015-01-17 14 views
5

Tôi có một phương pháp như thế này:Android toggleButton.setOnText và .invalidate không làm mới văn bản

ToggleButton toggle = ((ToggleButton)findViewById(R.id.toggle)); 
toggle.setTextOn("blah"); 
toggle.setTextOff("blahblah"); 
toggle.invalidate(); // doesn't work? 

phương pháp này được gọi từ onOptionsItemSelected. Nút chuyển đổi nằm trong một số LinearLayout nằm bên trong một số LinearLayout khác.

Tôi đang mong đợi văn bản cập nhật ngay sau khi phương thức được gọi. Thay vì văn bản trên chuyển đổi chỉ cập nhật sau khi tôi tự nhấn nó để chuyển đổi tiểu bang. Tôi đang thiếu gì ở đây, tôi có sử dụng phương pháp sai không? Tại sao không .invalidate hoạt động?

Trả lời

10

Thay vì hủy bỏ hiệu lực, bạn có thể cập nhật các nút như thế này:

toggle.setChecked(toggle.isChecked()); 

Cập nhật:

Nó là lạ rằng setTextOffsetTextOn không cập nhật nút. Tuy nhiên setText thực hiện điều đó. Vì vậy, chỉ cần đặt văn bản cho mỗi nút và setText để cập nhật giá trị hiện tại:

// Text based on state 
ToggleButton toggle = ((ToggleButton)findViewById(R.id.toggle)); 
toggle.setTextOn("blah"); 
toggle.setTextOff("blahblah"); 

CharSequence text = toggle.isChecked() ? toggle.getTextOn() : toggle.getTextOff(); 
toggle.setText(text); 
+0

Tác phẩm này, nhưng tại sao? Và đây có phải là cách tốt nhất để làm điều đó không? – ZirconCode

+1

@ZirconCode được cập nhật bằng một giải pháp khác. – Simas

+3

các giải pháp cảm thấy rất khó khăn nhưng chúng hoạt động. Cảm ơn! – ZirconCode

Các vấn đề liên quan