2011-07-07 45 views
7

如何在用戶鍵入任何內容之前顯示AutoCompleteTextView的一些默認建議?即使創建了擴展AutoCompleteTextView的自定義類,我也無法找到這樣做的方法。Android:使用默認建議的AutoCompleteTextView

我想顯示常見輸入值的建議以保存用戶輸入。

有什麼建議嗎?

回答

-1

如果你不需要它是動態的,我會通過在資源中有一個字符串數組,然後在AutoCompleteTextView即將被查看時加載數組。像:

public class CountriesActivity extends Activity { 
    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.countries); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_dropdown_item_1line, COUNTRIES); 
     AutoCompleteTextView textView = (AutoCompleteTextView) 
       findViewById(R.id.countries_list); 
     textView.setAdapter(adapter); 
    } 

    private static final String[] COUNTRIES = new String[] { 
     "Belgium", "France", "Italy", "Germany", "Spain" 
    }; 
} 

它可以在http://developer.android.com/reference/android/widget/AutoCompleteTextView.html

發現我已經做了幾次,這使得它能夠從用戶學習的是另一種方式o使用與IE瀏覽器的簡單光標一個數據庫連接。當你創建數據庫時,你可以插入一些默認值。 Here's與使用簡單的光標適配器的示例:http://androidcommunity.com/forums/f4/how-to-use-autocompletetextview-with-simplecursoradapter-15875/

編輯1:

一個想法來顯示列表中的用戶開始之前的類型是具有下面的EditText一個簡單的列表視圖。不知道是否可以調用autocompletetextview來顯示建議,應該可以以某種方式進行。也許你需要創建自己的autocompletetextiew類。

+0

大衛,你的答案只會顯示當用戶開始輸入時的列表。我正在尋找的是在用戶開始輸入之前顯示建議列表(不一定是動態的)。任何想法? –

+0

哦,我想我有點累了。我會看看我能想出什麼。如果我想出新的東西,我會編輯我的答案。 –

4

您應該子類AutoCompleteTextView並覆蓋enoughToFilter()以一直返回true。之後,您可以撥打performFiltering("",0)(這是一個受保護的功能,所以您可以通過班級中的公共功能導出此調用)。

類似的東西:

public class ContactsAutoCompleteTextView extends AutoCompleteTextView { 


    public ContactsAutoCompleteTextView(Context context) { 
     super(context); 
    } 

    public ContactsAutoCompleteTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public ContactsAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public boolean enoughToFilter() { 
     return true; 
    } 

    public void temp() { 
     performFiltering("",0); 
    } 
} 
2

伊泰·卡哈那的答案是確實是正確的。我唯一要補充的是,不是創建一個temp()函數,而是重寫onFocusChanged函數。我個人使用以下內容:

@Override 
     protected void onFocusChanged (boolean focused, int direction, Rect previouslyFocusedRect) { 
      if(focused) 
       performFiltering("", 0); 
      super.onFocusChanged(focused, direction, previouslyFocusedRect); 
     } 
相關問題