2012-07-03 19 views
20

Tôi gặp sự cố với hành vi của trình giả lập Jelly Bean mới nhất. Tôi có một số EditTexts trong ứng dụng của mình. An OnEditorActionListener cung cấp xử lý đặc biệt khi người dùng nhấn phím ENTER trên bàn phím. Điều này làm việc cho đến khi ICS, nhưng bây giờ trên Jelly Bean phương pháp gọi lại người nghe onEditorAction() không còn được gọi. Chỉ một dòng mới được chèn vào EditText.onEditorAction() không được gọi sau khi phím Enter đã được nhấn vào trình giả lập Jelly Bean

Điều này có thể được sao chép theo cách này:

EditText testEditText = new EditText(context); 
testEditText.setOnEditorActionListener(new OnEditorActionListener() { 

    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     Log.d(TAG, "onEditorAction() called"); 
     return false; 
    } 
}); 
addView(testEditText); 

Đây có phải là một lỗi trong Jelly Bean? Hoặc trong giả lập? Hay hành vi đã được thay đổi cố ý?

Tò mò người khác viết rằng phương pháp này được gọi là, nhưng với các thông số bất ngờ, trên Nexus 7 chạy Jelly Bean ở đây: null keyevent and actionid = 0 in onEditorAction() (Jelly Bean/Nexus 7)

+1

dự án mẫu này hoạt động như mong đợi: https://github.com/commonsguy/cw-omnibus/tree/master/ActionBar/ActionBarDemo – CommonsWare

+0

@CommonsWare: Cảm ơn bạn, tôi tìm thấy một cách giải quyết cho tôi vấn đề trong mã của bạn. Nếu tôi làm như sau, phím ENTER được trao đổi với phím GO trên bàn phím ảo, kích hoạt trênEditorAction(): editText.setRawInputType (InputType.TYPE_CLASS_TEXT); editText.setImeOptions (EditorInfo.IME_ACTION_GO); – Hendrik

+1

Hoặc trong XML: android: imeOptions = "actionGo" \t \t android: inputType = "text" – Hendrik

Trả lời

32

Nếu ai đó tìm thấy câu hỏi này:

Tôi đã thử nghiệm một số này lần và trên trình giả lập Jelly Bean, phương thức gọi lại của trình lắng nghe onEditorAction() thực sự không còn được gọi khi phím Enter được nhấn trên bàn phím ảo.

Như tôi đã đề cập ở trên, giải pháp hoặc cách giải quyết có thể là thay thế phím Enter bằng một trong các phím tác vụ khả dụng. Chúng vẫn kích hoạt trênEditorAction(). Tôi cũng phải xác định kiểu đầu vào.

editText.setRawInputType(InputType.TYPE_CLASS_TEXT); 
editText.setImeOptions(EditorInfo.IME_ACTION_GO);
<EditText 
... 
android:imeOptions="actionGo" 
android:inputType="text" /> 
+2

và điều gì xảy ra nếu điện thoại không hỗ trợ imeActions? (Có nhiều thiết bị không có.) – Darpan