2012-05-16 11 views
113

Bir EditText odağı kaybettiğinde yakalamam gerekiyor, başka sorular aradım ama bir cevap bulamadım. Bir EditText'in odağı kaybettiğini nasıl bilebilirim?

benim için çalışmıyor, bu

OnFocusChangeListener foco = new OnFocusChangeListener() { 

    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     // TODO Auto-generated method stub 

    } 
}; 

gibi OnFocusChangeListener kullanılan Fakat.

cevap

257

setOnFocusChangeListener'un onFocusChange değerini uygulayın ve hasFocus için bir boolean parametresi var. Bu yanlış olduğunda, başka bir kontrole odaklanmayı kaybettiniz.

editTextReaserch.setOnFocusChangeListener(this); 
editTextMyWords.setOnFocusChangeListener(this); 
editTextPhone.setOnFocusChangeListener(this); 

: senin OnCreate örneğin bir dinleyici ekleyebilirsiniz yılında

public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{ 

:

EditText txtEdit = (EditText) findViewById(R.id.edittxt); 

txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {   
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (!hasFocus) { 
       // code to execute when EditText loses focus 
      } 
     } 
    }); 
+15

+1 - ama metin düzenleme bir liste görünümü ise, her anahtar aşağı kutusu kaybetme ve odak almasını sağlayacağı belirtmek gerekir. Şu anda odaklanmış kutuyu takip etmek için bu çözüme bakın: http://stackoverflow.com/questions/9527067/android-edittext-in-listview-loses-focus-on-calling-notifydatavaled – bsautner

+13

41 temelde yazdığı bir cevabın yanıtları "hasFocus" değerini oku ". Gerçek şu ki, bu, editText'in odağını kaybetmesini sağlamak için gerçekten çok zor ve bununla ilgili pek çok cevapsız soru var. –

+0

Gösterdiğiniz kodu nereye ekleyebilirim? "OnCreate" içinde olduğu gibi koyarsam uygulama çöküyor – Jona

6

bu arayüzün bir factorized kullanımını istiyorsanız Activity, örnek OnFocusChangeListener() uygulamasını sağlayın o zaman android stüdyosu, arabirimden yöntemi eklemenizi ister, onu kabul et ... i t gibi olacak:

@Override 
public void onFocusChange(View v, boolean hasFocus) { 
// todo your code here... 
} 

ve bir factorized kodu var gibi, sen sadece bunu yapmak gerekecek:

@Override 
public void onFocusChange(View v, boolean hasFocus) { 
    if (hasFocus) { 
     editTextReaserch.setText(""); 
     editTextMyWords.setText(""); 
     editTextPhone.setText(""); 
    } 
    if (!hasFocus){ 
     editTextReaserch.setText("BlaBlaBla"); 
     editTextMyWords.setText(" One Two Tree!"); 
     editTextPhone.setText("\"your phone here:\""); 
    } 
} 

şey sen !hasFocus kod davranışı içindir Odağı kaybeden öğe, bu hile yapmalı! Ancak, böyle bir durumda, odak değişikliğinin kullanıcının girişlerinin üzerine yazılabileceğine dikkat edin!

0

Onun Çalışma Düzgün

EditText et_mobile= (EditText) findViewById(R.id.edittxt); 

et_mobile.setOnFocusChangeListener(new OnFocusChangeListener() {   
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
       // code to execute when EditText loses focus 
if (et_mobile.getText().toString().trim().length() == 0) { 
         CommonMethod.showAlert("Please enter name", FeedbackSubmtActivity.this); 
        } 
      } 
     } 
    }); 



public static void showAlert(String message, Activity context) { 

    final AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setMessage(message).setCancelable(false) 
      .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 

       } 
      }); 
    try { 
     builder.show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
İlgili konular