画面の向きが変更された後、ArrayAdapterフィルターが正しくフィルターを塗らないのはなぜですか?
-
26-09-2019 - |
質問
レイアウトは基本的なものです。上部の編集に続いて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
}
}
解決
Android開発に慣れていない他のプログラマー(私のような)がこれに困惑した場合に備えて、私はこの自己繰り返しの投稿をすると思いました。だから、によると Androidリファレンス Onresumeは、アクティビティがある場合にのみ呼び出されます
1)作成
2)再起動
3)再開(履歴書後に前景に運ばれる)
わかりました、それで、スクリーンの向きはこれと何の関係がありますか?さて、ドキュメンテーションを読んだほとんどの開発者は、読むべきことがたくさんあり、クールなものを実装したいという事実を説明してそれをスキムします。私も同じでした。私がさらに読んでいたなら、私は後で多くの頭痛を避けていたでしょう:
特に指定しない限り、構成の変更(画面の向き、言語、入力デバイスなどの変更など)により、現在のアクティビティが破壊されます。
そして今、フィルターが正しく機能しない理由は明らかです。問題は、フィルタリングが開始される前に、(画面の向きの変更でアクティビティが破壊された後)リストアダプターが完全にまたはまったく人口がかかっていない(リフレッシュの非同期性のため)ことでした。