Sự kiện xử lý trọng tâm của EditText


145

Bất cứ ai có thể đề nghị tôi bất kỳ sự kiện liên quan đến trọng tâm của EditText? Ứng dụng của tôi chứa một EditText, chấp nhận một URL trong đó.

Bây giờ vấn đề của tôi là, sau khi người dùng sẽ nhập URL vào trường và Di chuyển xa hơn, không có bất kỳ sự kiện nhấp nào, tức là khi tiêu điểm sẽ di chuyển từ EditText, nó sẽ phát hiện Url đã nhập và đi đến máy chủ.

Nếu tôi nhận được trả lời bằng cách sử dụng Json Parsing, thì nó sẽ thuận tiện hơn.

Câu trả lời:


519

Dưới đây là ví dụ người nghe tập trung.

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        if (hasFocus) {
            Toast.makeText(getApplicationContext(), "Got the focus", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "Lost the focus", Toast.LENGTH_LONG).show();
        }
    }
});

Trong các đoạn bên trong trình nghe thay đổi tập trung, tôi không thể cập nhật giao diện người dùng của mình, có ý kiến ​​gì không?
moDev

2
Điều này không hoạt động. Nếu bàn phím bị ẩn bằng cách "nhập" hoặc ẩn nút bàn phím trên một số thiết bị, "mất tiêu điểm" sẽ không được kích hoạt. Nếu bạn tập trung vào chỉnh sửa văn bản một lần nữa, nó sẽ không tập tin "lấy tiêu điểm".
SnowWolf

1
Xin lưu ý rằng nếu bạn đặt bố cục của mình để thay đổi kích thước khi bàn phím mềm được hiển thị hoặc làm điều gì đó liên quan đến ui bằng TextWatcher, người nghe có thể được gọi rất nhiều - thậm chí hai lần cho mỗi ký tự được gõ! stackoverflow.com/questions/14727248/ cường
M_M

12
  1. Khai báo đối tượng của EditText trên đầu lớp:

     EditText myEditText;
  2. Tìm EditText trong Hàm onCreate và setOnF FocusChangeListener của EditText:

    myEditText = findViewById(R.id.yourEditTextNameInxml); 
    
    myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View view, boolean hasFocus) {
                    if (!hasFocus) {
                         Toast.makeText(this, "Focus Lose", Toast.LENGTH_SHORT).show();
                    }else{
                        Toast.makeText(this, "Get Focus", Toast.LENGTH_SHORT).show();
                    }
    
                }
            });

Nó hoạt động tốt.


11

Khi ở kotlin nó sẽ trông như thế này:

editText.setOnFocusChangeListener { view, hasFocus ->
        if (hasFocus) toast("focused") else toast("focuse lose")
    }

4

Đối với những người trong chúng tôi, giải pháp hợp lệ ở trên không hoạt động, có một cách giải quyết khác ở đây

 searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean isFocused) {
            if(!isFocused)
            {
                Toast.makeText(MainActivity.this,"not focused",Toast.LENGTH_SHORT).show();

            }
        }
    });

Điều này đã làm việc nhưng tôi không hiểu y ở trên giải pháp không hiệu quả với tôi
shruti iyyer 29/07/17
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.