La mise en page est basique: un EditText en haut suivi d'un ListView. EditText a un TextWatcher.onTextChanged implémenté de sorte que ArrayAdapter.getFilter.filter est appelé avec le texte entré. Les données de ArrayAdapter sont actualisées de manière asynchrone lors de la reprise (voir l'extrait de code ci-dessous). Assez facile, fonctionne bien aussi ... jusqu'à ce que l'orientation de l'écran est modifiée. Pourquoi le filtrage se briserait-il soudainement lorsque le téléphone est tourné de côté?Pourquoi ArrayAdapter ne filtre-t-il pas correctement après le changement d'orientation de l'écran?
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
}
}
Exactement, juste pour les autres qui arriveront ici: vous pouvez désactiver ce comportement par défaut en ajoutant 'orientation' à l'attribut' android: configChanges' de l'élément ''. * Mais * vous devrez gérer le changement d'orientation manuellement. Plus d'infos ici: http://developer.android.com/guide/topics/manifest/activity-element.html#config –
andr