2011-10-16 12 views
7

Por qué El constructor ArrayAdapter (new View.OnKeyListener() {}, int, String []) no está definido en los siguientes mi codificación Esta codificación es para obtener datos de SQLite cuando se escribe conteo de palabras con más de 3 caracteres. Pero, muestra el siguiente error.Por qué El constructor ArrayAdapter <String> (new View.OnKeyListener() {}, int, String []) no está definido

El ArrayAdapter constructor (nuevo View.OnKeyListener() {}, int, String []) es indefinido

ed1 = (AutoCompleteTextView)findViewById(R.id.searchWord); 
ed1.setOnKeyListener(new View.OnKeyListener() 
{ 
    Integer count = 0; 
    String typeWord = ""; 
    public boolean onKey(View v, int keyCode, KeyEvent event) 
    {     
     if (KeyEvent.ACTION_DOWN == event.getAction()) { 
      if (keyCode != 67) { 
       count++; 
       char c = (char)event.getUnicodeChar(); 
       typeWord = typeWord + c; 
      } 
      else { 
       count--; 
      } 
      if (count > 2 && typeWord != "") {                    
       countries = getAutosuggestWord(typeWord); 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.autosuggest, countries); 
       ed1.setAdapter(adapter);        
      } 
     }      
     return false;      
    }    
}); 

Respuesta

23

Debe calificar el uso de this cuando desee hacer referencia a la clase adjunta de una clase interna. En su código, si la clase envolvente es su subclase Actividad (digamos que se llama MyActivity), a continuación, usted escribiría:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(MyActivity.this, 
    R.layout.autosuggest, 
    countries); 
+2

Guau .. Es genial. Salvas mi vida. – ppshein

4

El constructor no está definido porque this es una referencia a View.OnKeyListener. Use YourOuterClass.this en su lugar.

+0

Desafortunadamente, no hay clases externas. Está en onCreate. – ppshein

+1

@ppshein - hay una clase externa: tu clase de actividad. La respuesta de dtmilano (como la mía) es correcta porque está creando una clase interna anónima con 'new View.OnKeyListener() {...}'. Dentro de '{...}', 'this' se refiere a la clase interna anónima, no a su clase de actividad. –

+1

Eso es lo que quise decir, YourActivity.this. –

0

La palabra clave this apunta a la instancia actual de la clase View.OnKeyListener. El constructor de ArrayAdapter toma el contexto actual como primer parámetro que es su nombre de clase externo, es decir, Ver (digamos MiActividad).

Debe usar MyActivity.this en lugar de this.

0

Sé que esto es ridículamente tarde, pero suelo usar getActivity() en esta circunstancia. Entonces se vería así:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), R.layout.autosuggest, countries); 
ed1.setAdapter(adapter); 
+0

Gracias por la limpieza aquí – DipDro420

Cuestiones relacionadas