1

AndroidAnnotations 2.7.1 を使用しており、アプリケーション全体で正常に使用しています。ただし、最近、@EViewGroup を使用したアダプターとカスタム ビューに関連するいくつかの問題に遭遇しました。クックブックに記載されているレシピに従いました。

2 つの異なるアダプターと 2 つの異なるカスタム ビューがあります。

両方のアダプターで、ListView の行にある誤った ImageView が、ライブラリ Android Universal Image Loader によって読み込まれた画像で更新されます。また、1 つのアダプターでは、1 つクリックするだけで複数のチェックボックスがチェックされます。

ShowViewShowsAdapter <-- ListView の行で間違った ImageView と Checkbox が更新されました

ShowScheduleViewScheduleAdapter <-- ListView の行の間違った ImageView

各行の高さを決定するために getView() が複数回呼び出されることはわかっています。

UIL オプションで ViewHolders と .resetViewBeforeLoading() も試しましたが、役に立ちませんでした。

この動作の原因は何ですか?

前もって感謝します!

4

1 に答える 1

2

ビューはアダプターによって再利用されるため、そのビューの以前の表示から古い状態を保持している可能性があります。

データをカスタム ビューにバインドする方法を確認してください。以前にバインドされたすべてのデータは、リセットされなければ保持される可能性があることを念頭に置いてください。

たとえば、カスタム ビューで次のデータ バインド メソッドを使用すると、同じ問題が発生する可能性があります。

public void bind(Data data) {
   if (data.foo) {
      textView.setColor(Color.WHITE);
   }
   (...)
}

ビューがリサイクルされ、以前data.fooは true であった場合、現在data.fooが false の場合、textView はその色を白のままにします。正しい方法は次のとおりです。

public void bind(Data data) {
   if (data.foo) {
      textView.setColor(Color.WHITE);
   } else {
      textView.setColor(<inital color>);
   }
   (...)
}
于 2013-07-22T17:47:03.963 に答える