मुझे कैसे पता चलेगा जब एक EditText खो देता है?


162

जब EditTextमेरा ध्यान केंद्रित होता है तो मुझे पकड़ने की आवश्यकता होती है , मैंने अन्य प्रश्न खोजे हैं, लेकिन मुझे कोई उत्तर नहीं मिला।

मैंने OnFocusChangeListenerइस तरह का इस्तेमाल किया

OnFocusChangeListener foco = new OnFocusChangeListener() {

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

    }
};

लेकिन, यह मेरे लिए काम नहीं करता है।

जवाबों:


342

लागू onFocusChangeकी setOnFocusChangeListenerऔर वहाँ 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
            }
        }
    });

20
+1 - लेकिन यह ध्यान देने योग्य है कि यदि आपका संपादित पाठ एक सूची में है, तो हर कुंजी नीचे बॉक्स में खो जाएगी और ध्यान केंद्रित करेगी। वर्तमान में केंद्रित बॉक्स का ट्रैक रखने के लिए यह समाधान देखें: stackoverflow.com/questions/9527067/…
bsautner

मैं आपके द्वारा दिखाए गए कोड को कहां जोड़ूं? अगर मैं इसे "onCreate" में रखूं तो ऐप क्रैश हो जाता है
Jona

@ Léon Pelletier सच? वास्तव में? उपयोगकर्ता एक और ध्यान देने योग्य नियंत्रण को छूता है और EditText इसे खो देता है। मैं कोई समस्या नहीं देख सकता। यदि आप अपने कोड द्वारा फोकस सेट करते हैं तो यह समान है।
अविश्वसनीय जन

@ जोना आप इसे कहीं भी जोड़ सकते हैं लेकिन ऑनक्रिएट () काम करता है। अगर यह क्रैश होता है तो आप कुछ गलत करते हैं।
अविश्वसनीय जन

8

यदि आप इस इंटरफ़ेस का एक फैक्टराइज्ड उपयोग चाहते हैं, तो अपना Activityकार्यान्वयन OnFocusChangeListener()करें:

public class Shops extends AppCompatActivity implements View.OnFocusChangeListener{

OnCreateआप अपने उदाहरण के लिए एक श्रोता जोड़ सकते हैं:

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

तब android स्टूडियो आपको इंटरफ़ेस से विधि जोड़ने का संकेत देगा, इसे स्वीकार करें ... यह इस तरह होगा:

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

और जैसा कि आपको एक कारक कोड मिला है, आपको बस इतना करना होगा:

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

आपके द्वारा कोडित कुछ भी !hasFocusउस आइटम के व्यवहार के लिए है जो फ़ोकस खो देता है, जो कि चाल करना चाहिए! लेकिन इस बात से सावधान रहें कि इस तरह की स्थिति में, उपयोगकर्ता की प्रविष्टियों पर ध्यान केंद्रित करने का परिवर्तन ओवरराइट हो सकता है!


1
सिर्फ 'ही' का उपयोग क्यों न करें! 'hasFocus'
सलमान नज़ीर

उस समय, मैं बस चीजों को बहुत स्पष्ट करना चाहता था, लेकिन जैसा कि मैंने कहा कि यह वैसे भी उपयोग करने योग्य नहीं है ...
सेर्बस


1

इसके काम करना उचित है

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

}

0

जावा 8 लैम्ब्डा अभिव्यक्ति का उपयोग करना:

editText.setOnFocusChangeListener((v, hasFocus) -> {
    if(!hasFocus) {
        String value = String.valueOf( editText.getText() );
    }        
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.