Android通讯录实践项目

课程的实践项目,还是遇到了一些坑的

setItemChecked

这里要实现的是listView的多选模式,选中的item背景变色。可是点击了之后item怎么也不显示选中状态,排查后发现一开始用一个布尔变量维护进入和退出多选状态,根本没有把listView设置成多选模式
问题:
1、listView中的item必须是checkable的
2、需要设置好listView多选模式
解决方案:

//解决check状态一直为false
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE)
listView.setItemChecked(position,true)

至于checkable的listView,参考https://blog.csdn.net/attheway/article/details/38734175#

删除后动态更新listView

首先要在AndroidManifest.xml添加权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

删除逻辑处理:

del.setOnClickListener{
	for (i in 0 until adapter.count) {
		if (listView.isItemChecked(i)) {
			val queryName = adapter.getItem(i)?.name // 要先获取查询姓名再删除
			adapter.remove(adapter.getItem(i)) // 遍历adapter中的数据,找到被check项删除
			adapter.notifyDataSetChanged()

			/* 在原数据库中删除联系人 */

			// 首先检查有无权限
			if(ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_CONTACTS)!= PackageManager.PERMISSION_GRANTED){
			// 没有则发起权限请求
				ActivityCompat.requestPermissions(this,
				arrayOf(Manifest.permission.WRITE_CONTACTS),1)
			}
			else{
			// 有权限 进行操作
				var uri: Uri = ContactsContract.RawContacts.CONTENT_URI  // 选择的表名
				val resolver = contentResolver
				val where = ContactsContract.PhoneLookup.DISPLAY_NAME // 选择的列名

				val cursor: Cursor? = resolver.query(uri,arrayOf(ContactsContract.Data._ID),
				"$where=?",arrayOf(queryName),null)
				if (cursor!!.moveToFirst()) {
					val id: Int = cursor.getInt(0)
					//根据id删除data中的相应数据
					resolver.delete(uri, "$where=?", arrayOf(queryName))
					uri = ContactsContract.Data.CONTENT_URI
					resolver.delete(uri,ContactsContract.Data.RAW_CONTACT_ID + "=?",arrayOf(id.toString() + ""))
				}
			}
		}
	}
	listView.clearChoices()
	Toast.makeText(this,"删除成功啦",Toast.LENGTH_SHORT).show()
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值