2015-02-24 15 views
7

Phương thức setText(CharSequence text, boolean filter) của AutoCompleteTextView được giới thiệu trong API 17, dường như cũng hoạt động ở các phiên bản Android thấp hơn. Tôi đã mong đợi nó sụp đổ trong 2,3 thiết bị với NoSuchMethodError, nhưng nó chỉ làm việc tốt. Đó không phải là thực sự là một vấn đề, nhưng tôi chỉ tò mò muốn biết làm thế nào nó được làm việc :)được thêm vào trong API 17 hoạt động ở các cấp API thấp hơn quá

Đây là mã của tôi -

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


} 

Trả lời

7

Khi Google nói rằng một cái gì đó đã được giới thiệu trong API cấp 17, tất cả những gì họ có nghĩa là nó đã trở thành công khai và tài liệu ở cấp API 17.

Việc triển khai thực tế có thể đã có từ ngày đầu tiên của Android, nhưng nó được ẩn từ nhà phát triển bằng chú thích đặc biệt hoặc chỉ bằng cách sử dụng private.

Edit: Dưới đây là phương pháp chữ ký thực tế + tài liệu từ mã nguồn Gingerbread, cho thấy việc sử dụng các anotation như

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

Bạn nói đúng. Tôi chỉ xem xét mã nguồn của Gingerbread 'AutoCompleteTextView' (https://android.googlesource.com/platform/frameworks/base/+/gingerbread/core/java/android/widget/AutoCompleteTextView.java) và phương thức đó được đánh dấu là ẩn . Cảm ơn câu trả lời. –

+1

@AbhishekV Đây là những gì StackOverflow là có cho, phải không? :) –

Các vấn đề liên quan