少しカスタム ビューを作成しましたが、基礎となるデータ モデル オブジェクトのリスナーを onAttachedToWindow() に登録し、onDetachedFromWindow() で登録解除することをお勧めします。
コード例:
public class CustomView extends View implements OnChangedListener {
private DataObject data;
public CustomView(Context context) {
super(context);
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
if (data != null) {
data.addOnChangedListener(this);
}
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (data != null) {
data.removeOnChangedListener(this);
}
}
public void setData(DataObject newData) {
if (this.data != null) {
// Remove the listener from the old data
this.data.removeOnChangedListener(this);
}
// Register the listener to the new data
newData.addOnChangedListener(this);
this.data = newData;
}
public void onChanged(DataObject data){
// Update this UI component.
// assumption: This one will always be invoked from the UI Thread
}
}
うまくいくと思いますが、これが一般的に良いアイデアになるかどうかはわかりません。setData()
アダプターから呼び出されるListView で CustomView を使用したいと思います。パフォーマンスに影響を与えるとは思いませんし、メモリ リークに終わることもないと思います。
誰かが似たようなものを構築したり、このアーキテクチャの欠点を教えてくれますか?
OnChangedListener
単純に Activity を aにして を呼び出さない理由を自問するかもしれませんAdapter.notifyDatasetChanged()
。
私もです :D
複数の CustomView があり、同じ DataObject を表示している場合、それらを一度に自動的に更新できる場合は、悪い考えではありません。