1

ListView がすべてのビューをリサイクルすることを決定した時期を理解するのに苦労しています。私はいくつかのレイアウトを変更し、その後アニメーションを再生する 2 つの異なる ListViews を持っています。私の最初の ListView ではこれは正常に機能しますが、変更しようとしている行だけが実際に影響を受けていますが、他の ListView ではすべての行が影響を受け、ビューが再利用されています。

これにはかなりの数のクラスが関係しているため、実際にコードを投稿することはできません。私はそれを分解しようとしましたrequestLayout()が、行の子孫ビューの 1 つを呼び出した後、行を再利用していることに気付きました。しかし、私の他の ListView では同じことを行い、まったく呼び出されません。

私のコードのどこにnotifiyDatasetChanged()も呼び出されておらず、他のビューも変更していません。

ListView が実際にいつビューを再利用する必要があるかを調べようとしています。

ps。私は2.3.3を使用しています。そして、私はsetHasTransientState()4.1で知っています。でも残念ながら使えません

4

1 に答える 1

1

私は自分の特定の問題を見つけました。

ListView のソースを通じて長いデバッグを行った後、2 つの ListView 実装の動作の違いを発見しました。そのうちの 1 人が を呼び出していることがわかりましたonSizeChanged()。最初は新しい高さで、すぐに別の高さが続いてonSizeChanged()いました。このメソッドではmDataChanged、ビューがリサイクルされるフラグを設定します。

私の他のListViewでは、行の高さを固定しているので、この問題はありません。行の高さを変える必要はないので、この状況でも同じことを行います。

于 2013-06-26T07:14:54.207 に答える