天天看點

android listactivity 動态更新,如何動态更新Android上的ListView

首先,您需要建立一個具有EditText和ListView的XML布局。

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:hint="type to filter"

android:inputType="text"

android:maxLines="1"/>

android:layout_width="fill_parent"

android:layout_height="0dip"

android:layout_weight="1"

/> 

這将正确地布局所有内容,在ListView之上有一個很好的EditText。接下來,像平常一樣建立一個ListActivity,但是添加一個setContentView()呼叫onCreate()方法,是以我們使用最近聲明的布局。記住我們确認了ListView特别是android:id="@android:id/list"..這允許ListActivity知道哪一個ListView我們希望在我們聲明的布局中使用。@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.filterable_listview);

setListAdapter(new ArrayAdapter(this,

android.R.layout.simple_list_item_1,

getStringArrayList());

}

現在運作應用程式應該顯示您以前的應用程式。ListView上面有一個漂亮的盒子。為了讓這個盒子做點什麼,我們需要從它中擷取輸入,并讓輸入過濾清單。雖然很多人都試着用手做這件事,最 ListView Adapter課程附帶一個Filter對象,可用于自動執行篩選。我們隻需要從EditText進入Filter..結果發現這很容易。若要運作快速測試,請将這一行添加到您的onCreate()打電話adapter.getFilter().filter(s);

請注意,您需要儲存ListAdapter到一個變量來實作這個工作-我已經儲存了我的ArrayAdapter從前面轉到一個名為“擴充卡”的變量。

下一步是從EditText..這實際上需要一些思考。您可以添加一個OnKeyListener()敬你的EditText..但是,此偵聽器隻接收一些關鍵事件..例如,如果使用者輸入“wyw”,預測文本可能會推薦“眼睛”。在使用者選擇“Wyw”或“眼睛”之前,您的OnKeyListener不會收到關鍵事件。有些人可能更喜歡這個解決方案,但我發現它令人沮喪。我想要每個關鍵事件,是以我可以選擇過濾還是不過濾。解決方案是TextWatcher..隻需建立并添加一個TextWatcher到EditText,并通過ListAdapterFilter每次文本更改時都會發出篩選器請求。請記住移除TextWatcher在……裡面OnDestroy()!以下是最後的解決方案:private EditText filterText = null;ArrayAdapter adapter = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.filterable_listview);

filterText = (EditText) findViewById(R.id.search_box);

filterText.addTextChangedListener(filterTextWatcher);

setListAdapter(new ArrayAdapter(this,

android.R.layout.simple_list_item_1,

getStringArrayList());}private TextWatcher filterTextWatcher = new TextWatcher() {

public void afterTextChanged(Editable s) {

}

public void beforeTextChanged(CharSequence s, int start, int count,

int after) {

}

public void onTextChanged(CharSequence s, int start, int before,

int count) {

adapter.getFilter().filter(s);

}};@Overrideprotected void onDestroy() {

super.onDestroy();

filterText.removeTextChangedListener(filterTextWatcher);}