1. Contacts 模块Fragment结构:
下图为联系人模块主要窗口中的Fragment类图:
从类图中可以看出,联系人大部分原生的列表界面(主界面,多选界面等,余下Fragment未列出),其中的Fragment都继承自ContactEntryListFragment,,而基类
ContactEntryListFragment<T extends ContactEntryListAdapter>
实现了下面五个接口:
OnFocusChangeListener //监听焦点变化;
OnTouchListener //监听触摸时间;
LoaderManager.LoaderCallbacks //返回LoaderManager中加载的数据;
OnScrollListener //监听ListView滚动状态;
OnItemClickListener //监听ListView Item点击事件。
mListView.setOnFocusChangeListener(this);
mListView.setOnTouchListener(this);
mListView.setOnItemClickListener(this);
mListView.setOnScrollListener(this);
(1). OnFocusChangeListener:
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (view == mListView && hasFocus) {
hideSoftKeyboard();
}
}
(2). OnTouchListener:
@Override
public boolean onTouch(View view, MotionEvent event) {
if (view == mListView) {
hideSoftKeyboard();
}
return false;
}
从源码中可以看出,当焦点或者触摸事件到ListView中时,会做隐藏软键盘的操作。
(3). OnItemClickListener:
protected abstract void onItemClick(int position, long id);
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
hideSoftKeyboard();
int adjPosition = position - mListView.getHeaderViewsCount();
if (adjPosition >= 0) {
onItemClick(adjPosition, id);
}
}
当点击ListView item时触发该方法,从而调用抽象方法onItemClick(position, id);子类中不需要再去监听OnItemClickListener,只需要重写该方法即可,
(4). OnScrollListener:
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
}