Я создаю контактное приложение, в котором использую Recycler View для вывода списка. Представление рециркулятора работает нормально и перечисляет элементы, как показано на рисунке ниже
Теперь я хочу, чтобы каждый контакт щелкал, чтобы передать его данныедругой макет (макет профиля), который будет выглядеть следующим образом:
Адаптер утилизатора работает по нажатию даже для того, чтобы просто сделать тост, но не работает для передачи диалогаданные в другой макет. Я попробовал несколько попыток, но оказался бесполезным.
Вот мой адаптер
package com.example.newcontactapp
import android.app.Dialog
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
class ContactAdapter (data:ArrayList<ContactClass>, internal var context: Context):RecyclerView.Adapter<ContactAdapter.ContactViewHolder>(){
internal var data : ArrayList<ContactClass>
init{
this.data = data
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContactViewHolder{
val layout = LayoutInflater.from(context).inflate(R.layout.contact_row, parent, false)
return ContactViewHolder(layout)
}
override fun onBindViewHolder(holder:ContactViewHolder, position:Int){
holder.name.text = data[position].name
holder.phoneNumber.text = data[position].phone
holder.image.setImageResource(data[position].image)
holder.card.setOnClickListener {
Toast.makeText(context, data[position].name, Toast.LENGTH_SHORT).show()
// val profilePage = Dialog(this.context)
// profilePage.setContentView(R.layout.profile)
//// profilePage.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_PANEL)
// profilePage.setTitle("Profile page")
//
// val profileName = profilePage.findViewById<TextView>(R.id.profileName)
// val profileEmail = profilePage.findViewById<TextView>(R.id.profileEmail)
// val profileImage = profilePage.findViewById<ImageView>(R.id.profileImage)
//
// profileName.text = data[position].name
// profileEmail.text = data[position].phone
// profileImage.setImageResource(data[position].image)
//
// profilePage.show()
}
}
override fun getItemCount(): Int {
return data.size
}
class ContactViewHolder(contactView: View): RecyclerView.ViewHolder(contactView){
internal var name: TextView
internal var image: ImageView
internal var phoneNumber: TextView
internal var card: ViewGroup;
init{
name = itemView.findViewById(R.id.itemText)
image = itemView.findViewById(R.id.itemImage)
phoneNumber = itemView.findViewById(R.id.itemPhone)
card = itemView.findViewById(R.id.contactCard)
}
}
}
MainActivity
package com.example.newcontactapp
import android.os.Bundle
import com.google.android.material.snackbar.Snackbar
import androidx.appcompat.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// setSupportActionBar(toolbar)
val contacts = ArrayList<ContactClass>()
contacts.add(ContactClass("Darot", R.drawable.maleavatar, "080000000000"))
contacts.add(ContactClass("Lewis", R.drawable.maleavatar, "080000000000"))
contacts.add(ContactClass("Chigozie", R.drawable.femaleavatar, "080000000000"))
contacts.add(ContactClass("Chigozie", R.drawable.femaleavatar, "080000000000"))
contacts.add(ContactClass("Chigozie", R.drawable.femaleavatar, "080000000000"))
contacts.add(ContactClass("Chigozie", R.drawable.femaleavatar, "080000000000"))
contacts.add(ContactClass("Chigozie", R.drawable.femaleavatar, "080000000000"))
contacts.add(ContactClass("Chigozie", R.drawable.femaleavatar, "080000000000"))
val adapter = ContactAdapter(contacts, applicationContext)
recycler.layoutManager = LinearLayoutManager(applicationContext)
recycler.adapter = adapter
fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
return when (item.itemId) {
R.id.action_settings -> true
else -> super.onOptionsItemSelected(item)
}
}
}
Я хочу использовать метод диалога, потому что я чувствую, что этопроще, но я не смог добавить ошибку окна, я попытался ввести активность, но оказалось трудным. Пожалуйста, помогите. Я использую это как проект для моего обучения.