画面の向きが変更された後、ArrayAdapterフィルターが正しくフィルターを塗らないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/3024243

質問

レイアウトは基本的なものです。上部の編集に続いて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)再開(履歴書後に前景に運ばれる)

わかりました、それで、スクリーンの向きはこれと何の関係がありますか?さて、ドキュメンテーションを読んだほとんどの開発者は、読むべきことがたくさんあり、クールなものを実装したいという事実を説明してそれをスキムします。私も同じでした。私がさらに読んでいたなら、私は後で多くの頭痛を避けていたでしょう:

特に指定しない限り、構成の変更(画面の向き、言語、入力デバイスなどの変更など)により、現在のアクティビティが破壊されます。

そして今、フィルターが正しく機能しない理由は明らかです。問題は、フィルタリングが開始される前に、(画面の向きの変更でアクティビティが破壊された後)リストアダプターが完全にまたはまったく人口がかかっていない(リフレッシュの非同期性のため)ことでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top