Agregar un botón en Recyclerview para editar o eliminar datos de la base de datos en tiempo real.
Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código ni la salida en markdownSoy un principiante en programación, así que discúlpeme si mi código es desordenado. Necesito ayuda para completar mi programa.
Estoy usando recyclerview para recuperar algunos datos de la base de datos en tiempo real y quiero agregar el botón de edición y eliminación en el recyclerview para editar y eliminar algunos datos.
Ya creé el botón en el archivo xml, solo que no sé cómo codificar el botón. Ya probé algunos tutoriales de YouTube y consulté algunos códigos en algunas otras publicaciones en Stack Overflow, pero la mayoría de las veces el código me dará un error o el botón no hará nada. A continuación se incluyen mi código y estructura de base de datos:
DoctorViewAdapter.kt
package com.example.patientmonitor
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.android.volley.Request
import com.android.volley.Response
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import java.util.ArrayList
import kotlin.concurrent.fixedRateTimer
class DoctorViewAdapter(private val patientList : ArrayList<doctorviewpatient>) : RecyclerView.Adapter<doctorviewadapter.doctorviewholder>() {
//WebView
private lateinit var pulseGraph: WebView
private lateinit var temperatureGraph: WebView
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DoctorViewHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.patient_item,parent,false)
return DoctorViewHolder(itemView)
pulseGraph.webViewClient = WebViewClient()
temperatureGraph.webViewClient = WebViewClient()
pulseGraph.settings.javaScriptEnabled = true
temperatureGraph.settings.javaScriptEnabled = true
pulseGraph.settings.builtInZoomControls = true
temperatureGraph.settings.builtInZoomControls = true
}
override fun onBindViewHolder(holder: DoctorViewHolder, position: Int) {
val currentitem = patientList[position]
holder.userID.text = currentitem.userID
holder.fullName.text = currentitem.fullName
holder.userEmail.text = currentitem.email
holder.phoneNumber.text = currentitem.phoneNumber
var pulseValue = "null"
var temperatureValue = "null"
//get pulse value from thingspeak and set to text view
val pulsequeue = Volley.newRequestQueue(holder.pulseValue.context)
val temperaturequeue = Volley.newRequestQueue(holder.temperatureValue.context)
val pulseRequest = StringRequest(Request.Method.GET, currentitem.pulseValue as String?,
Response.Listener<string> { response ->
pulseValue = response
holder.pulseValue.text = pulseValue
}, Response.ErrorListener {
// didn't work
})
//get temperature value from thingspeak and set to text view
val tempRequest = StringRequest(Request.Method.GET, currentitem.temperatureValue as String?,
Response.Listener<string> { response ->
temperatureValue = response
holder.temperatureValue.text = temperatureValue
}, Response.ErrorListener {
// didn't work
})
//get thingspeak data every 1 second
fixedRateTimer("timer", false, 0L, 1000) {
pulsequeue.add(pulseRequest)
temperaturequeue.add(tempRequest)
}
}
override fun getItemCount(): Int {
return patientList.size
}
class DoctorViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
val userID : TextView = itemView.findViewById(R.id.tvUserID)
val fullName : TextView = itemView.findViewById(R.id.tvFullName)
val userEmail : TextView = itemView.findViewById(R.id.tvEmail)
val phoneNumber : TextView = itemView.findViewById(R.id.tvPhoneNumber)
val pulseValue : TextView = itemView.findViewById(R.id.tvPulseValue)
val temperatureValue : TextView = itemView.findViewById(R.id.tvTemperatureValue)
}
}
}
`PatientlistActivity.kt`
package com.example.patientmonitor
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.webkit.WebView
import androidx.appcompat.app.ActionBar
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.firebase.database.*
class PatientListActivity : AppCompatActivity() {
private lateinit var dbref : DatabaseReference
private lateinit var userRecyclerview : RecyclerView
private lateinit var userArrayList : ArrayList
private lateinit var viewPatientBtn : FloatingActionButton
private lateinit var doctorViewAdapter : DoctorViewAdapter
//ActionBar
private lateinit var actionBar: ActionBar
//WebView
private lateinit var pulseView: WebView
private lateinit var tempView: WebView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_patient_list)
//configure Actionbar //enable back button
actionBar = supportActionBar!!
actionBar.title = “View Patients”
actionBar.setDisplayHomeAsUpEnabled(true)
actionBar.setDisplayShowHomeEnabled(true)
userRecyclerview = findViewById(R.id.patientList)
userRecyclerview.layoutManager = LinearLayoutManager(this)
userRecyclerview.setHasFixedSize(true)
userArrayList = arrayListOf
getUserData()
}
private fun getUserData() {
//get intent
val assignedDoctor = intent.getStringExtra(“doctorID”)
val currentUserAccess = intent.getStringExtra(“currentUserAccess”)
dbref = FirebaseDatabase.getInstance().getReference(“Users”)
dbref.orderByChild(“assignedDoctor”).equalTo(assignedDoctor).addListenerForSingleValueEvent(object : ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.exists()){
for (userSnapshot in snapshot.children){
val user = userSnapshot.getValue(doctorViewPatient::class.java)
userArrayList.add(user!!)
}
userRecyclerview.adapter = DoctorViewAdapter(userArrayList)
}
}
override fun onCancelled(error: DatabaseError) {
TODO(“Not yet implemented”)
}
})
}
}
}
Esta es mi clase de datos
`doctorViewPatient.kt`
data class doctorViewPatient(val userID : String? =null,
val fullName : String? =null,
val email : String? =null,
val phoneNumber : String? =null,
val pulseValue : String? = null,
val temperatureValue : String? = null)
“`
Esta es mi estructura de base de datos en tiempo real
</doctorviewadapter.doctorviewholder>
davy.ai
Para agregar funcionalidades de edición y eliminación a los elementos de su RecyclerView, debe modificar la clase
DoctorViewAdapter
y el archivo de diseñopatient_item.xml
.patient_item.xml
Agregue dos botones en su archivo de diseño
patient_item.xml
para las funcionalidades de Edición y Eliminación. Por ejemplo:DoctorViewAdapter
Agregue dos interfaces a
DoctorViewAdapter
para manejar los clics en los botones de Edición y Eliminación:Agregue dos devoluciones de llamada para estas interfaces:
Actualice el método
onCreateViewHolder()
para encontrar y establecer los escuchas de clic para los botones de Edición y Eliminación:Actualice el método
onBindViewHolder()
para establecer los escuchas de clic en los botones de Edición y Eliminación para cada elemento:PatientListActivity
Actualice el método
getUserData()
para establecer los escuchas de clic en los botones de Edición y Eliminación para los elementos en el RecyclerView:Ahora, cuando hace clic en los botones de Edición o Eliminación en cualquier elemento, se activará la devolución de llamada correspondiente en la clase
DoctorViewAdapter
. Puede manejar estas devoluciones de llamada para editar o eliminar los datos correspondientes de la base de datos en tiempo real.