เหตุการณ์สำหรับการจัดการโฟกัสของ EditText


145

ใครสามารถแนะนำฉันเหตุการณ์ใด ๆ ที่เกี่ยวข้องกับการมุ่งเน้นของEditText? แอปพลิเคชันของฉันมี a EditTextซึ่งยอมรับ URL อยู่

ตอนนี้ปัญหาของฉันคือว่าหลังจากที่ผู้ใช้จะป้อน URL ในฟิลด์และย้ายเพิ่มเติมโดยไม่ต้องคลิกเหตุการณ์ใด ๆ เช่นเมื่อโฟกัสจะย้ายจากEditTextมันควรตรวจจับ URL ที่ป้อนและไปที่เซิร์ฟเวอร์

ถ้าฉันได้รับคำตอบโดยใช้ Json Parsing มันจะสะดวกกว่า

คำตอบ:


519

นี่คือตัวอย่างการฟังโฟกัส

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();
        }
    }
});

ในชิ้นส่วนภายในฟังการเปลี่ยนแปลงโฟกัสฉันไม่สามารถอัปเดต UI ความคิดใด ๆ
moDev

2
สิ่งนี้ใช้ไม่ได้ หากแป้นพิมพ์ถูกซ่อนโดย "ป้อน" หรือซ่อนปุ่มแป้นพิมพ์ในอุปกรณ์บางอย่าง "การสูญเสียโฟกัส" จะไม่ถูกเรียกใช้ หากคุณมุ่งเน้นที่การแก้ไขข้อความอีกครั้งข้อความนั้นจะไม่ "ได้รับการโฟกัส"
SnowWolf

1
โปรดทราบว่าหากคุณตั้งค่าเลย์เอาต์ของคุณให้ปรับขนาดเมื่อแสดงคีย์บอร์ดนุ่มหรือทำบางสิ่งที่เกี่ยวข้องกับ UI โดยใช้ TextWatcher ผู้ฟังอาจได้รับการเรียกใช้มาก - แม้สองครั้งสำหรับตัวอักษรแต่ละตัวที่พิมพ์! stackoverflow.com/questions/14727248/…
M_M

12
  1. ประกาศวัตถุ EditText ที่ด้านบนของคลาส:

     EditText myEditText;
  2. ค้นหา EditText ในฟังก์ชั่น onCreate และ setOnFocusChangeListener ของ 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();
                    }
    
                }
            });

มันใช้งานได้ดี


11

เมื่ออยู่ใน kotlin มันจะมีลักษณะเช่นนี้:

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

4

สำหรับพวกเราที่วิธีการแก้ปัญหาที่ถูกต้องดังกล่าวไม่ทำงานมีวิธีแก้ไขปัญหาอื่นที่นี่

 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();

            }
        }
    });

สิ่งนี้ใช้ได้ แต่ฉันไม่เข้าใจวิธีการแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉัน
shruti iyyer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.