7

मेरे पास DialogFragment है जिसमें AutoCompleteTextView, और Cancel और OK बटन शामिल हैं।AutoCompleteTextView केवल सुझाए गए विकल्पों की अनुमति देता है

AutoCompleteTextView उपयोगकर्ता से प्राप्त होने वाले उपयोगकर्ता नामों के सुझाव दे रहा है।

मैं क्या करना चाहता हूं कि उपयोगकर्ता को केवल मौजूदा उपयोगकर्ता नाम दर्ज करने में सक्षम होना है।

मुझे पता है कि उपयोगकर्ता यह जांच कर सकता है कि उपयोगकर्ता OK पर क्लिक करता है, लेकिन क्या कोई अन्य तरीका है, मान लें कि उपयोगकर्ता को ऐसे उपयोगकर्ता नाम मौजूद नहीं होने पर चरित्र दर्ज करने की अनुमति न दें। मुझे नहीं पता कि यह कैसे करें क्योंकि प्रत्येक दर्ज चरित्र पर मुझे केवल 5 सुझाव मिल रहे हैं। सर्वर को इस तरह से लागू किया गया है।

किसी भी सुझाव का स्वागत है। धन्यवाद

+0

इसके बजाय स्पिनर का उपयोग करें ... – Selvin

+1

@ सेल्विन मैं स्पिनर का उपयोग नहीं कर सकता क्योंकि बहुत सारे उपयोगकर्ता नाम हैं, और ग्राहक स्वत: पूर्ण टेक्स्टव्यू रखना चाहता है। आपके सुझाव के लिए धन्यवाद – nikmin

+0

खोज विकल्प के साथ सूची दृश्य के बारे में कैसे? –

उत्तर

10

मैं और अधिक उपयुक्त समाधान तो यह नहीं पा सके:

मैं इस फोकस परिवर्तन श्रोता

actName.setOnFocusChangeListener(new OnFocusChangeListener() { 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (!hasFocus) { 
       ArrayList<String> results = 
         ((UsersAutoCompleteAdapter) actName.getAdapter()).getAllItems(); 
       if (results.size() == 0 || 
         results.indexOf(actName.getText().toString()) == -1) { 
        actName.setError("Invalid username."); 
       }; 
      } 
     } 
}); 

जोड़ा कहाँ विधि getAllItems()ArrayList रिटर्न सुझाव हैं।

तो जब मैं कुछ उपयोगकर्ता नाम दर्ज करता हूं, और फिर किसी अन्य फ़ील्ड पर जाता हूं तो यह श्रोता ट्रिगर होता है और यह जांचता है कि सुझाव सूची खाली नहीं है और यदि दर्ज उपयोगकर्ता नाम उस सूची में है। यदि स्थिति संतुष्ट नहीं है, तो एक त्रुटि दिखाई जाती है।

private boolean checkErrors() { 

    ArrayList<String> usernameResults = 
      ((UsersAutoCompleteAdapter) actName.getAdapter()).getAllItems(); 

    if (actName.getText().toString().isEmpty()) { 
     actName.setError("Please enter a username."); 
     return true; 
    } else if (usernameResults.size() == 0 || usernameResults.indexOf(actName.getText().toString()) == -1) { 
     actName.setError("Invalid username."); 
     return true; 
    } 

    return false; 
} 

तो अगर AutoComplete दृश्य अभी भी ध्यान केंद्रित है, त्रुटि की जांच फिर से किया जाता है:

इसके अलावा, मैं OK बटन पर क्लिक एक ही जांच की है।

+0

'UsersAutoCompleteAdapter' क्या है? –

+0

@ जादूगर यह मेरी कस्टम सूची एडाप्टर है जिसे मैं AutocompleteTextView के लिए उपयोग करता हूं। यह सिर्फ एडाप्टर का नाम है। – nikmin

+0

ठीक धन्यवाद ........... –

संबंधित मुद्दे