Я недавно начал изучать Android разработку в Kotlin. Я следовал этому руководству и все прошло хорошо.
Теперь я пытаюсь объединить содержание этих двух руководств:
https://developer.android.com/training/contacts-provider/retrieve-details.html#kotlin
и
https://developer.android.com/guide/components/fragments#Example
для отображения сведений о контакте с использованием фрагментов. У меня проблемы с запуском действия в методе onItemClick
(в руководстве используется ListView):
override fun onItemClick(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
// Get the Cursor
val cursor: Cursor? = (parent.adapter as? CursorAdapter)?.cursor?.apply {
// Move to the selected contact
moveToPosition(position)
// Get the _ID value
contactId = getLong(Companion.CONTACT_ID_INDEX)
// Get the selected LOOKUP KEY
//contactKey = getString(CONTACT_KEY_INDEX)
mContactKey = getString(Companion.CONTACT_KEY_INDEX)
// Create the contact's content Uri
contactUri = ContactsContract.Contacts.getLookupUri(contactId, mContactKey)
/*
* You can use contactUri as the content URI for retrieving
* the details for a contact.
*/
}
val intent = Intent().apply{
setClass(activity,DetailsActivity::class.java)
putExtra("contactID",contactId)
putExtra("mContackKey",mContactKey)
putExtra("contactUri",contactUri)
}
startActivity(intent)
}
Если я создаю намерение для запуска действия, как показано в руководстве, я получаю ошибка компилятора " Предполагаемый тип - FragmentActivity ?, но ожидался контекст ".
Затем я изменил Intent на одно из следующих значений:
val intent = Intent().apply{
setClass(requireContext(),DetailsActivity::class.java)
putExtra("contactID",contactId)
putExtra("mContackKey",mContactKey)
putExtra("contactUri",contactUri)
}
startActivity(intent)
или
val intent = Intent().apply{
context?.let { setClass(it,DetailsActivity::class.java) }
putExtra("contactID",contactId)
putExtra("mContackKey",mContactKey)
putExtra("contactUri",contactUri)
}
startActivity(intent)
, при этом я не получаю сообщение об ошибке компилятора, но в Logcat вижу сообщение " W / ActivityThread: handleWindowVisibility: нет активности для токена android .os. BinderProxy@9dc9013"
Можете ли вы указать мне правильный способ создания экземпляра действия из метода onClick объекта ListView внутри фрагмента? Спасибо!
В примечании по теме: вы рекомендуете эти руководства или их содержание устарело?
Редактировать: полный класс фрагмента здесь