2013-05-11 9 views
5

Ho una vista di autocompletetext che ho collegato a un servizio web, quindi mi mostra suggerimenti mentre scrivo. Ora, come posso nascondere la tastiera virtuale quando l'utente inizia a scorrere il menu a tendina del completamento automatico? Ho guardato attraverso la rete, ma non ho trovato alcun metodo per individuare i tocchi sul menu a discesa di completamento automatico.Chiudi la tastiera durante lo scorrimento nel menu a discesa su autocompletetextview in Android

+0

u possibile utilizzare http://developer.android.com/reference/android/view/inputmethod /InputMethodManager.html e http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#hideSoftInputFromWindow%28android.os.IBinder,%20int%29 – Sam

risposta

5

La soluzione migliore che potessi venire per questo, si nasconde la tastiera quando l'utente inizia a scorrere la lista e mostrando di nuovo la tastiera, se l'utente tocca il TextView di nuovo. Questo praticamente funziona per la maggior parte delle versioni e dei dispositivi del sistema operativo, a differenza di altre soluzioni che potresti vedere, come ad esempio l'impostazione dell'altezza di dropDownHeight.

Di seguito è riportato un codice di esempio per nascondere la tastiera, quando l'utente inizia a scorrere. Fondamentalmente, devi creare un ascoltatore touch nell'adattatore AutoCompleteTextView.

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

geniale !!!!! – Netero

0

L'aggiunta di questa linea in XML funziona bene per me

Questo renderà la tastiera dietro la lista a scorrimento.

android:dropDownHeight="wrap_content" 
2

vorrei prendere questa risposta, o la risposta di @ ayorhan come risposta accettata, è davvero il modo migliore per gestire respingendo la tastiera quando si scorre una selezione a discesa.

Questa è una soluzione di playoff @ ayorhan, da utilizzare con SimpleCursorAdapter. Ho dovuto fare una classe SimpleCursorAdapter personalizzato:

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

Quindi è possibile creare un'istanza della classe ovunque:

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); 
Problemi correlati