Как мне найти выбранный элемент из ListView в Kotlin? - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь создать приложение, которое получает список контактов и помещает их в 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, но он не отображает телефонные номера, когда я нажимаю на элемент

1 Ответ

0 голосов
/ 03 августа 2020

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()
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...