Android 5.1 Contacts源码分析(三):Contacts模块Fargment结构

本文详细解析了Android联系人应用中Contacts模块的主要窗口Fragment结构,包括其继承关系、实现的接口及其功能,如焦点变化处理、触摸事件响应、列表项点击事件、滚动状态监听等,并介绍了不同类型的Fragment在联系人多选界面中的作用,以及如何根据不同Intent action启动对应的Fragment进行特定操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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) {
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值