レイアウトは基本的なものです。上部に EditText があり、その後に ListView が続きます。EditText には TextWatcher.onTextChanged が実装されているため、入力されたテキストで ArrayAdapter.getFilter.filter が呼び出されます。ArrayAdapter のデータは、再開時に非同期に更新されます (以下のコード スニペットを参照)。簡単で、うまく機能します...画面の向きが変更されるまで。電話を横向きにすると、フィルタリングが突然壊れるのはなぜですか?
public class SometActivity extends ListActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
...
listAdapter = new ArrayAdapter<MemoryStatistic>(this, R.layout.list_item);
setListAdapter(listAdapter);
searchText = (EditText)findViewById(R.id.searchText);
searchText.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence text, int start, int before, int count)
{
listAdapter.getFilter().filter(text);
}
...
}
...
}
@Override
protected void onResume()
{
asyncRefreshListAdapter();//refresh the data asynchronously when activity is resumed
}
}