2011-11-08 73 views
11

我使用Android的AutoCompleteTextViewCursorAdapter來自動完成添加到應用程序。在視圖的onItemClickListener()中(即,當用戶觸摸其中一個自動完成的下拉項目時),我檢索文本並將其放在EditText中,以便用戶可以在需要時對其進行修改。禁用的Android AutoCompleteTextView用戶之後,從下拉選擇項下

然而,當我打電話setText()上TextView的自動完成功能的行爲被觸發,並且下拉再次顯示。如果用戶使用鍵盤輸入新文本,我只想顯示下拉菜單。有沒有辦法做到這一點?

+0

我做類似的東西這裏! http://stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42

回答

2

經過幾個小時的黑客攻擊後回答我自己的問題:原來你應該實現自己的OnItemClickListener,而是依靠現有的點擊偵聽器來填充TextView。我最初實現了onItemClickListener,因爲它使用Cursor.toString()的結果來填充文本視圖。要更改輸出字符串,您應該在CursorAdapter中實現convertToString(Cursor)。返回的CharSequence將填充到文本視圖中。

這樣做還可以防止再次顯示出來的下拉菜單(自的setText()觸發完成的行爲,但默認onItemClickListener沒有)。

13

可以使用AutoCompleteTextView對象的dismissDropDown()方法。看看documentation

+0

我想阻止顯示下拉直到鍵入新鍵。如果我使用dismissDropDown(),下拉菜單在被解僱之前會短暫顯示。 – magneticMonster

+0

如果您將方法調用放在onItemClickListener()中,那麼當您單擊某個項目時,它應該關閉該列表。這不是你想要的嗎? –

6

如果你想解散AutoCompleteTextView的下拉列表,你應該使用它的post(Runnable r)方法。它爲我:)

下面是一個例子:

mAutoCompleteTextView.post(new Runnable() { 
    public void run() { 
     mAutoCompleteTextView.dismissDropDown(); 
    } 
} 
+0

我還在我的活動中添加了onConfigurationChanged中的相同片段 –