2013-05-11 2 views
5

Ich habe eine Autocompletetextview, die ich mit einem Webservice verknüpft habe, so zeigt es mir Vorschläge, wie ich tippe. Wie kann ich nun die Soft-Tastatur ausblenden, wenn der Benutzer durch das Dropdown-Feld für die automatische Vervollständigung scrollt? Ich schaute durch das Netz, aber fand keine Methode, Berührungen auf dem Autocomplete Dropdown zu erkennen.Schließen Sie die Tastatur beim Scrollen im Dropdown auf autocompletetextview in Android

+0

u verwenden können http://developer.android.com/reference/android/view/inputmethod /InputMethodManager.html & http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#hideSoftInputFromWindow%28android.os.IBinder,%20int%29 – Sam

Antwort

5

Die beste Lösung, die ich für diese kommen konnte, versteckt sich die Tastatur, wenn der Benutzer startet die Liste scrollen und die Tastatur wieder zeigt, wenn der Benutzer wieder auf die Textview berührt. Dies funktioniert bei den meisten Betriebssystemversionen und -geräten im Gegensatz zu anderen Lösungen, die Sie sehen können, wie z. B. der Höhe von dropDownHeight.

Unten ist ein Beispielcode, um die Tastatur zu verbergen, wenn der Benutzer scrollt. Grundsätzlich müssen Sie einen Touch-Listener in Ihrem AutoCompleteTextView-Adapter erstellen.

public View getView(final int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = inflater.inflate(viewResourceId, parent, false); 
     holder = new ViewHolder(); 
     init(convertView, holder); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    convertView.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       InputMethodManager imm = (InputMethodManager) getContext() 
         .getSystemService(
           Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(
         searchView.getWindowToken(), 0); 
      } 

      return false; 
     } 
    }); 

    setView(position, holder); 
    return convertView; 
} 
+0

brilliant !!!!! – Netero

0

diese Zeile in XML Hinzufügen funktioniert gut zu mir

Dies wird die Tastatur hinter der Scroll-Liste machen.

android:dropDownHeight="wrap_content" 
2

ich diese Antwort nehmen würde, oder die Antwort von @ ayorhan als akzeptierter Antwort, es ist wirklich der beste Weg, entlassen die Tastatur zu handhaben, wenn eine Drop-Down-Auswahl zu scrollen.

Dies ist eine Play off @ ayorhan Lösung, für den Einsatz mit einem SimpleCursorAdapter. Ich musste eine benutzerdefinierte SimpleCursorAdapter Klasse machen:

public class SimpCursAdap extends SimpleCursorAdapter { 

public SimpCursAdap(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { 
    super(context, layout, c, from, to, flags); 

} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 
    view.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
       InputMethodManager imm = (InputMethodManager) getContext() 
         .getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(
         view.getApplicationWindowToken(), 0); 
      } 
      return false; 
     } 
    }); 
    return view; 
    } 
} 

Dann können Sie die Klasse überall instanziiert:

final SimpleCursorAdapter adapter = new SimpCursAdap(aContext, 
      aRowLayout, 
      null, 
      aColNames, 
      aRowViewsIds, 
      0); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
adapter.setStringConversionColumn(aValueColId); 
autocompletetextview.setAdapter(adapter); 
Verwandte Themen