私は、30個のアイテムを持つListViewを持っています。
項目については、含まれているアクティビティのインスタンス変数に格納するカスタム アダプターを使用しています。
場合によっては、コンテンツ (モデル オブジェクトを含むリスト) をキャッシュする必要があります。つまり、活動を再開しても、何も変更する必要はありません。
モデルがキャッシュされている場合、何も変更されていないため、ビューを再描画する必要はないと思います。
キャッシュなしでは、onResume で毎回これを呼び出します。
myAdapter.setMyData(new ArrayList<MyType>());
myAdapter.setFoo(new Foo());
myAdapter.notifyDataSetChanged();
そしてそれはうまくいき、リストはうまく表示されます。
しかし、それを呼び出さないと (このアクティビティが初めて再開されたときを除いて) (キャッシュを使用しているため)、ListView は奇妙に見えます。通常は最大 7 個のアイテムが画面に収まりますが、今では非常に長いスペースを挟んで最大 2 個しか表示されません。また、アイテム内のアセットも少しシフトしています。下にスクロールすると修正され、次の項目は正常に表示され、上にスクロールするとすべて正常に表示されます。
どうしてこれなの?
編集:問題の鍵は
myAdapter.notifyDataSetChanged();
onResume で毎回それを呼び出すと、リストが正しく表示されます。しかし、データセットが変更されていないため、なぜそれをしなければならないのかわかりません。