2016.11.22经验积累(1.item长按与单机,2调用联系人.3.LayoutInflater获取方式)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 == null) {
return;
}
try {
String username, usernumber;
// ContentProvider展示数据类似一个单个数据库表
// ContentResolver实例带的方法可实现找到指定的ContentProvider并获取到ContentProvider的数据
ContentResolver reContentResolverol = getContentResolver();
// URI,每个ContentProvider定义一个唯一的公开的URI,用于指定到它的数据集
Uri contactData = 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获取方式)的主要内容,如果未能解决你的问题,请参考以下文章