首页 > 代码库 > 2016.11.22经验积累(1.item长按与单机,2调用联系人.3.LayoutInflater获取方式)

2016.11.22经验积累(1.item长按与单机,2调用联系人.3.LayoutInflater获取方式)

很早之前就想建立一个微博,记录一下每天工作遇到的问题,第一是为了加深印象,第二是为了给遇见类似问题的同志提供思路.现在微博审批通过了,非常高兴.

1.listView长按事件返回值,之前一直以为是鸡肋,没啥用.昨天项目经理让加一个长按删除功能,结果长按同时触发单机进详情页的动作,断点跑了半天,最后百度,结果让我 吐了一口老血.

如何破:修改长按监听返回值.list长按返回值:false同时触发点击与双击,true只触发双击.

2.调用系统联系人,开始找了系统里封装的代码贴过来,结果测试提bug说获取不到联系人及电话号码(测试人员华为手机,本攻城师小米4),随后网上找了N种方式,有结果了确不太理解,一个联系人应该对应多个电话号码吧?!好使就行,不求甚解了!!!.

如何破:直接上代码

//触发调用系统联系人

startActivityForResult(new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI), CONTACT_PICKER_RESULT);//CONTACT_PICKER_RESULT 这个值自己定义

//onActivityResult 返回值处理

if (requestCode == CONTACT_PICKER_RESULT) {
if (resultCode == Activity.RESULT_OK) {
if (data =http://www.mamicode.com/= null) {
return;
}
try {
String username, usernumber;
// ContentProvider展示数据类似一个单个数据库表
// ContentResolver实例带的方法可实现找到指定的ContentProvider并获取到ContentProvider的数据
ContentResolver reContentResolverol = getContentResolver();
// URI,每个ContentProvider定义一个唯一的公开的URI,用于指定到它的数据集
Uri contactData = http://www.mamicode.com/data.getData();
// 查询就是输入URI等参数,其中URI是必须的,其他是可选的,如果系统能找到URI对应的ContentProvider将返回一个Cursor对象.
Cursor cursor = managedQuery(contactData, null, null, null,
null);
cursor.moveToFirst();
// 获得DATA表中的名字
username = cursor
.getString(cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
UIControlUtils.UITextControlsUtils.setUIText(
findViewById(R.id.liveUserName), UITag.EDIT_TEXT,
username);
// 条件为联系人ID
String contactId = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
// 获得DATA表中的电话号码,条件为联系人ID,因为手机号码可能会有多个
Cursor phone = reContentResolverol.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId, null, null);
while (phone.moveToNext()) {
usernumber = phone
.getString(phone
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
UIControlUtils.UITextControlsUtils.setUIText(
findViewById(R.id.liveUserTel),
UITag.EDIT_TEXT, usernumber);
}

} catch (Exception ex) {
System.out.println(ex.getMessage());
}

}

3.LayoutInflater的获取方式,三种:

a. LayoutInflater inflater = getLayoutInflater();//调用Activity的getLayoutInflater() 

b. LayoutInflater inflater = LayoutInflater.from(context);
c. LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);

其原理调用系统服务,联想到很多类似的代码底层都是这样的,写下来加深记忆.

2016.11.22经验积累(1.item长按与单机,2调用联系人.3.LayoutInflater获取方式)