2012-02-24 37 views
5

Trong một trong các hoạt động của tôi, tôi có ba nút EditText và nút OK. OnFocusChangeListener được đặt thành ba số EditText s. Trình nghe phải kích hoạt mỗi khi tiêu điểm bị mất.OnFocusChange không phải lúc nào cũng hoạt động

Chuyển đổi giữa EditText s hoạt động hoàn hảo. Nhưng nếu người dùng nhấn nút OK thì không có thay đổi lấy nét (mất tiêu điểm) được kích hoạt cho EditText mà người dùng đã tập trung trước khi nhấn nút.

Mã của tôi có vấn đề gì?

private class MyOnFocusChangeListener implements OnFocusChangeListener { 
    private EditText editText; 

    public MyOnFocusChangeListener(final EditText editText) { 
     super(); 

     this.editText = editText; 
    } 

    @Override 
    public void onFocusChange(final View view, final boolean isFocused) { 
     if (!isFocused) { 
      if (editText == editText1) { 
       // Do a calculation 
      } else if (editText == editText2) { 
       // Do another calculation 
      } else if (editText == editText3) { 
       // Do a different calculation 
      } 
     } 
    } 
} 

@Override 
public void onCreate(final Bundle bundle) { 
    // ... 
    editText1.setOnFocusChangeListener(new MyOnFocusChangeListener(editText1)); 
    editText2.setOnFocusChangeListener(new MyOnFocusChangeListener(editText2)); 
    editText3.setOnFocusChangeListener(new MyOnFocusChangeListener(editText3)); 
    // ... 
} 

Trả lời

7

Bạn có thể thử để xóa các tập trung khi người dùng nhấp chuột vào OK hoặc nút khác ....

ví dụ

builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() 
{ 
    public void onClick(DialogInterface dialog, int whichButton) 
    { 
      editText1.clearfocus(); 
      editText2.clearfocus(); 
      editText3.clearfocus(); 
      .... 
    } 
} 
+0

Điều này có thể kích hoạt OnFocusChange trên cả ba EditText vì vậy tôi không thể sử dụng nó. Nhưng điều này đã giúp tôi tìm một cách tốt hơn. Bây giờ tôi lưu trữ EditText để lấy tiêu điểm trong một thành viên của lớp và trên OnClick của nút, tôi xóa tiêu điểm của EditText cụ thể đó. Điều đó hoạt động như một sự quyến rũ. Cảm ơn rất nhiều. –

1

Âm thanh như bạn có thể gặp vấn đề với chế độ cảm ứng, từ android docs:

"Mối quan hệ giữa chế độ cảm ứng, lựa chọn và tập trung có nghĩa là bạn không phải dựa vào lựa chọn và/hoặc tập trung để tồn tại trong ứng dụng của bạn. "

+0

Cảm ơn câu trả lời của bạn. Điều này thực sự tồi tệ vì tôi phải chọn giữa hai kịch bản xấu. 1.) Một calcualtion chỉ diễn ra nếu người dùng nhập vào một EditText khác nhau trước khi nhấn nút OK (các nút không được tập trung theo mặc định). 2.) Thay đổi nút thành tiêu điểm để người dùng phải nhấn nút hai lần. Cái thứ hai hoạt động tốt hơn cái đầu tiên bởi vì người dùng có thể lưu trữ các giá trị không được tính toán trong 1.). –

+0

Có lẽ bạn nên suy nghĩ lại về thiết kế ứng dụng của mình một chút, chính xác là nó đang cố gắng làm gì? Bạn có thể làm phức tạp hơn mã của mình, khi thiết kế lại có thể giúp giải quyết vấn đề của bạn. Ngoài ra mã của bạn có một số vấn đề, bạn không cần phải tạo một người nghe tập trung và chuyển edittext cho constructor. Khi onFocusChanged được gọi, nó sẽ chuyển cho bạn khung nhìn có tiêu điểm thay đổi, chỉ cần đưa tham số khung nhìn vào một văn bản chỉnh sửa (kiểm tra kiểu của nó trước tiên!). – Theblacknight

+1

Liên kết cung cấp: "Lỗi 404 - Không tìm thấy tệp". – astuter

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