2015-02-24 12 views
7

Metoda setText(CharSequence text, boolean filter) z AutoCompleteTextView, która została wprowadzona w API 17, wydaje się działać również w niższych wersjach Androida. Spodziewałem się, że ulegnie awarii w urządzeniu 2.3 z NoSuchMethodError, ale działa dobrze. Że nie jest to problem, ale jestem po prostu ciekaw, jak to działa :)metoda dodana w API 17 działa również na niższych poziomach API

Oto mój kod -

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


} 

Odpowiedz

7

Kiedy mówią, że Google coś zostało wprowadzone na poziomie 17 API, wszystko to oznacza, że ​​stało się publicznie dostępne i udokumentowane na poziomie interfejsu API 17.

Rzeczywista implementacja mogła tam być od pierwszego dnia Androida, ale w jako ukryte przed programistą za pomocą specjalnych adnotacji lub po prostu przy użyciu private.

Edit: Poniżej jest metoda rzeczywisty podpis + dokumentacja z kodu źródłowego Gingerbread, pokazując zastosowanie takiego adnotację

/** 
* 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

masz rację. Właśnie patrzyłem na kod źródłowy piernika "AutoCompleteTextView" (https://android.googlesource.com/platform/frameworks/base/+/gingerbread/core/java/android/widget/AutoCompleteTextView.java) i ta metoda jest oznaczona jako ukryta . Dziękuję za odpowiedź. –

+1

@AbhishekV Do tego właśnie służy StackOverflow, prawda? :) –

Powiązane problemy