1.3 和CallLogAdapter交互
Fragment和Adapter交互的架构如下,
监听器Listener是CallLogQueryHandler的内部接口,仅有2个方法,
public interface Listener {
/** Called when {@link CallLogQueryHandler#fetchVoicemailStatus()} completes. */
void onVoicemailStatusFetched(Cursor statusCursor);
/**
* Called when {@link CallLogQueryHandler#fetchCalls(int)} complete.
* Returns true if takes ownership of cursor.
*/
boolean onCallsFetched(Cursor combinedCursor);
}
mListener是一个WeakReference组,
private final WeakReference<Listener> mListener;
在CallLogQueryHandler的构造方法中初始化,
public CallLogQueryHandler(Context context, ContentResolver contentResolver, Listener listener,
int limit) {
super(contentResolver);
mContext = context.getApplicationContext();
mListener = new WeakReference<Listener>(listener);
mLogLimit = limit;
}
CallLogFragment
CallLogFragment的onCallsFetched方法主要逻辑如下,
mAdapter.changeCursor(cursor);
mAdapter 是CallLogAdapter对象,。
CallLogSearchFragment
CallLogSearchFragment是直接调用父类CallLogFragment的onCallsFetched方法。
MSimCallLogFragment
MsimCallLogFragment的onCallsFetched方法和CallLogFragment的onCallsFetched方法几乎完全相同,主要逻辑如下,
mAdapter.changeCursor(cursor);