2015-02-24 17 views
7

Il metodo setText(CharSequence text, boolean filter) di AutoCompleteTextView introdotto in API 17 sembra funzionare anche nelle versioni inferiori di Android. Mi aspettavo che si schiantasse nel dispositivo 2.3 con NoSuchMethodError, ma funziona perfettamente. Questo non è davvero un problema, ma io sono solo curioso di sapere come si sta lavorando :)aggiunto in API 17 funziona anche in livelli API inferiori

Ecco il mio codice -

<AutoCompleteTextView 
     android:id="@+id/autoCompleteTextView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/textView1" 
     android:textColor="@android:color/black" 
     android:ems="10" 
     android:text="AutoCompleteTextView" > 

     <requestFocus /> 
    </AutoCompleteTextView> 

....

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.widget.AutoCompleteTextView; 

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1); 
     //method introduced in API 17!! 
     autoCompleteTextView.setText("Example text", false); 
    } 


} 

risposta

7

Quando Google dire che qualcosa è stato introdotto al livello API 17, tutto ciò significa che è diventato pubblicamente disponibile e documentato in livello API 17.

L'implementazione effettiva potrebbe essere stata presente fin dal primo giorno di Android, ma era come nascosto dallo sviluppatore usando annotazioni speciali o semplicemente usando private.

Edit: Di seguito si riporta la firma del metodo attuale + documentazione dal codice sorgente Gingerbread, che mostra l'uso di tale anotation

/** 
* Like {@link #setText(CharSequence)}, except that it can disable filtering. 
* 
* @param filter If <code>false</code>, no filtering will be performed 
* as a result of this call. 
* 
* @hide Pending API council approval. 
*/ 
public void setText(CharSequence text, boolean filter) 
+1

hai ragione. Ho appena guardato il codice sorgente del 'gingerbread' AutoCompleteTextView' (https://android.googlesource.com/platform/frameworks/base/+/gingerbread/core/java/android/widget/AutoCompleteTextView.java) e quel metodo è contrassegnato come nascosto . Grazie per la risposta. –

+1

@AbhishekV Questo è ciò che StackOverflow è lì per, non è vero? :) –

Problemi correlati