android - 如何从 Kotlin 的 ListView 中找到选定的元素?
问题描述
我正在尝试制作一个获取联系人列表并将它们放入 ListView 的应用程序。我计划将电话号码保存到变量中,但现在我将它显示在 Toast 消息中,以便我可以确认该值是正确的。
AddNewAlarm.kt
package com.example.safetybuddy
import android.content.ContentResolver
import android.database.Cursor
import android.location.Location.convert
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.ContactsContract
import android.telephony.PhoneNumberUtils
import android.view.View
import android.widget.AdapterView
import android.widget.Button
import android.widget.SimpleCursorAdapter
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.get
import kotlinx.android.synthetic.main.activity_add_new_alarm.*
import kotlinx.android.synthetic.main.activity_users.*
import java.util.logging.Logger.global
class AddNewAlarm : AppCompatActivity() {
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_add_new_alarm)
// code to make the button work
val button = findViewById<Button>(R.id.btnAdd)
button.setOnClickListener{
// populate the listView
populate()
}
// get the number when an item is clicked
listView.setOnItemClickListener{ _,_,pos,_ ->
Toast.makeText(this, listView.getItemAtPosition(pos).toString(), Toast.LENGTH_SHORT).show()
}
}
private fun populate(){
// defines the columns
var cols = listOf<String>(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone._ID
).toTypedArray()
var from = listOf<String>(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER).toTypedArray()
var to = intArrayOf(android.R.id.text1, android.R.id.text2)
var rs = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, cols, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME) // sorts by display name
var adapter = SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, rs, from, to, 0)
listView.adapter = adapter
}
}
我能够填充 ListView,但是当我点击该项目时它不显示电话号码
解决方案
listview.getItemAtPosition(pos)
返回CursorWrapper
,您必须从中获取列值CursorWrapper
。
listView.setOnItemClickListener{ _,_,pos,_ ->
val cw : CursorWrapper = listView.getItemAtPosition(pos) as CursorWrapper;
val str: String = cw.getString(1);
Toast.makeText(this, str, Toast.LENGTH_SHORT).show()
}
推荐阅读
- node.js - NodeJS解析csv websocket typeerror发送一行
- python - 如何将正数区间的范围的给定字符串扩展为列表?
- math - 两个数相减等于1?
- node.js - 在 node/TypeScript 中使用 SecretClient 时如何使用用户 AD 帐户?
- google-drive-api - 从 AWS Lambda 函数调用时,Google Drive API 承诺根本不返回(但在本地工作正常)
- phpmyadmin - phpmyadmin直接url访问(post方式)
- javascript - 有没有办法创建一个 document.editable 切换?
- swift - 使用 Realm 和 Swift 查询领域以使用多个部分填充 numberOfRowsInSection 和 cellForRowAt
- sql - 迁移后左连接多个表
- javascript - 需要帮助在 .save() 函数中使用 updateMany mongoose 路由更新 mongodb