2012-05-16 49 views
113

我需要趕上EditText失去焦點時,我搜索了其他問題,但我沒有找到答案。如何知道EditText何時失去焦點?

我用OnFocusChangeListener這樣

OnFocusChangeListener foco = new OnFocusChangeListener() { 

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

    } 
}; 

但是,它並沒有爲我工作。

回答

257

執行onFocusChangesetOnFocusChangeListener並且hasFocus有一個布爾參數。當這是錯誤的,你已經失去了焦點到另一個控制。

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 - 但值得注意的是,如果你的編輯文本是在ListView,每個按鍵下會導致失去盒並獲得焦點。看到這個解決方案來跟蹤當前集中的框:http://stackoverflow.com/questions/9527067/android-edittext-in-listview-loses-focus-on-calling-notifydatachanged – bsautner

+13

41 upvotes for a answer that basic says 「閱讀'hasFocus'值」。事實是,這很難讓editText失去焦點,並且還有大量未解決的問題。 –

+0

我在哪裏添加您顯示的代碼?如果我把它放在「onCreate」中,應用程序崩潰 – Jona

6

有你Activity實現OnFocusChangeListener()如果你想要一個因式分解使用此接口, 例如:

public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{ 

在你OnCreate您可以添加一個監聽器,例如:

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

那麼android studio會提示你從界面添加方法,接受它... 我T將像:

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

,當你已經有了一個因式分解的代碼,你只需要做到這一點:

@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:\""); 
    } 
} 

任何你在!hasFocus代碼是的行爲失去重點的項目,應該做的伎倆!但要注意,在這種狀態下,重點的改變可能會覆蓋用戶的輸入!

0

其正常工作

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

}