の中にListView
あるがありTabHost
ます。CursorAdapter
4つの異なるビューをリストに返す習慣があります。4つのタイプの1つは、SDまたはアセットフォルダーからプルされたイメージです。もともと私はCursorAdapter
それ自体から画像を読み込んでいましたが、これにより各画像の読み込み中にUIスレッドがハングするため、コードをに移動しましたAsyncTask
。
これは、非常に短いアイテムのリストが返される場合を除いて、すべて機能します。これが発生した場合ListView
、画像が読み込まれた後はサイズが変更されず、画面上部のごく一部でしかスクロールできません。
リレーアウトを取得する方法がわかりませんlistView
。ビュー自体でrelayoutを呼び出して無効化することはできません。ビューの親を見つけようとすると、nullが返されます。デフォルトのListFragmentレイアウトでは、高さがすでに「Match_Parent」に設定されています。onCreateViewのレイアウトを、すべての高さが「Match_Parent」に設定されたレイアウトに手動で設定しても、修正されません。アダプター自体を呼び出しに渡すとnotifyDataSetChanged()
、ループが発生するだけで、サイズは変更されませんListView
。
イライラすることに、タブを変更すると、新しいタブがその上に描画される直前にビューが正しく点滅します。非常にまれに、デバイスを回転させたり、タブ間をフリックしたりすると、正しくレンダリングされますが、ほとんどの場合、正しくレンダリングされません。
デバッグの目的で、onListItemClickにさまざまなrelayoutコマンドを追加しようとしましたが、ListView.relayout()を呼び出すと問題が解決する場合がありますが、多くの場合は解決しません。
左側はAsyncTaskでのロード方法、右側はメインスレッドローダーでのロード方法です。コンテンツは左側にありますが、リストビューのサイズが正しくないため、スクロールする必要があります。
私は何が欠けていますか?ListView
または現在のタブ、さらには画面全体を再描画する方法はありますか?