0

Listener継承されたfinalフィールド ( ) のサブクラスにを登録する必要がありmCursorLoaderます。constructorサブクラスでこれを行う必要があります。できれば、フィールドをサブクラスに変更しnon-finalたり、サブクラスで何もしたりしないunRegisteringでください。

問題は、私の親クラスがListenerその実装からそのコンストラクターに登録していることです。そして、それが登録されないようにしてからListenerサブクラスを登録するListenerか、親クラスListenerを登録解除してからサブクラスを登録する方法が必要Listenerです。

説明するのが難しいので、さらに明確にする必要がある場合は、お知らせください。

public abstract class A<T> extends AsyncTaskLoader<List<T>> {

        protected final Listener mListener = new Listener();
        protected final CursorLoader mCursorLoader;
        protected final String mId;

        public A(Context context, String mId) {

                super(context);
                this.mCursorLoader = new CursorLoader(context);
                this.mCursorLoader.registerListener(0, mListener);
                this.mId = mId;

        }

        public class Listener implements OnLoadCompleteListener<Cursor> {

                public void onLoadComplete(final Loader<Cursor> loader, final Cursor cursor) {

                }
        }
}

public abstract class B<T> extends A<T> {

        protected B(Context context, String mId) {

                super(context, mId);

        }

        public class Listener implements OnLoadCompleteListener<Cursor> {

                public void onLoadComplete(final Loader<Cursor> loader, final Cursor cursor) {

                }
        }
}
4

1 に答える 1

1

リスナーを引数として受け取るコンストラクターを基本クラスに追加 (または既存のコンストラクターを変更) し、基本クラスのリスナーの代わりにこのリスナーを登録します。

protected A(Context context, String mId, OnLoadCompleteListener<Cursor> listener) {
    super(context);
    this.mCursorLoader = new CursorLoader(context);
    this.mCursorLoader.registerListener(0, listener);
    this.mId = mId;
}
于 2013-01-09T20:26:35.210 に答える