2013-01-09 66 views
0

我需要在繼承的final字段(mCursorLoader)的子類中註冊Listener。我需要在我的子類的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) { 

       } 
     } 
} 

回答

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; 
} 
+0

感謝您的回答,但我知道我要做什麼。這與你的建議非常相似。我只是想刪除這個問題,因爲這是非常本地化的。謝謝 – prolink007

相關問題