Tôi đã xác định trường EditText và tôi muốn được thông báo khi người dùng chỉnh sửa các trường đó. Vì vậy, tôi nghĩ: đơn giản - tôi thêm một OnKeyListener và vì vậy tôi đã làm. Nhưng mặc dù trường văn bản được chỉnh sửa (và thậm chí hiển thị văn bản đã nhập/sửa đổi) Tôi không nhận được bất kỳ cuộc gọi lại nào, tức là đầu ra LOG không hiển thị.Android: tại sao OnKeyListener của tôi() không được gọi?
TextView text = new TextView(this);
text.setText(...);
...
text.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event) {
TextView tv = (TextView)v;
CharSequence val = tv.getText();
Log.v(TAG, "value: " + val);
// ... rest omitted for brevity
}
});
Bất kỳ ý tưởng nào, tại sao gọi lại đó không bao giờ được gọi?
Michael
PS .: Sigh! Android thực sự đầy những điều kỳ quặc! Dường như hầu như không có gì tôi chạm vào cho đến nay đã làm việc ngay lập tức như người ta mong đợi. Và - tin hay không - tôi có rất nhiều kinh nghiệm với GUI, đặc biệt. trong Java (AWT, Swing, SWT, bạn đặt tên cho nó ...) Nhưng Android là một con thú thực sự khó khăn!
@Falmarri của tôi, có gì sai với điều đó? Về mặt khái niệm, getText trả về một chuỗi các ký tự, vì vậy không có gì sai khi xử lý việc lưu trữ giá trị trả về trong một biến có kiểu đó. Và bạn phải làm điều đó để sử dụng phương thức getText. Bạn không thể chỉ thay đổi phương thức onKey để lấy một TextView bởi vì nó ghi đè một phương thức trong OnKeyListener. (Có thể cho rằng, phải có một @Override trên nó, nhưng nó là khá rõ ràng trong trường hợp này.) – MatrixFrog
@Falmari: bạn rõ ràng đã không được lập trình cho Android. Tôi cũng sẽ perfer Strings nhưng alas Android trả về CharSequence của tất cả các nơi thay vì Strings, vì vậy bạn phải làm phôi hoặc toString() s thường xuyên. Và nếu một tiêu đề phương pháp chỉ định nghĩa một "Xem" nhưng bạn biết đó là một TextView và yo cần một trong những phương pháp mà chỉ TextView cung cấp, sau đó những gì khác bạn có thể làm gì? Bạn có đề xuất tốt hơn? – mmo