3

少しカスタム ビューを作成しましたが、基礎となるデータ モデル オブジェクトのリスナーを 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 を表示している場合、それらを一度に自動的に更新できる場合は、悪い考えではありません。

4

0 に答える 0