Empecé el desarrollo de Android hace unos días. Implementé una vista de reciclaje y en el método OnBindViewHolder del adaptador de vista de reciclaje utilicé setOnClickListener en el elemento de vista de reciclaje. Mi objetivo principal era comenzar una nueva actividad cuando se hace clic en el elemento de vista de reciclador, pero me encontré con una pared al implementar mi código de la siguiente manera:
override fun onBindViewHolder(holder: ViewHolder, position: Int) { val clusterItem = datalist[position] holder.clusterName.setText(clusterItem.name) holder.clusterStrat.setText(clusterItem.strats) holder.itemview.setOnClickListener() { startActivity(Intent(holder.itemview.context,ClusterSearchActivity::class.java)) } }Tuve 3 errores en la línea que contiene startActivity :
No coincide el tipo: el tipo inferido es Intención pero se esperaba Contexto
No se pasó ningún valor para el parámetro 'intent'
No se pasó ningún valor para el parámetro 'opciones'
Después de pasar por varias soluciones, finalmente encontré esta: https://www.titanwolf.org/Network/q/08ad14d9-cb9a-4b87-923b-f97089db769a/y
Usando context.startActivity(intent) reescribí mi código así:
override fun onBindViewHolder(holder: ViewHolder, position: Int) { val clusterItem = datalist[position] holder.clusterName.setText(clusterItem.name) holder.clusterStrat.setText(clusterItem.strats) holder.itemview.setOnClickListener() { holder.itemview.context.startActivity(Intent(holder.itemview.context,ClusterSearchActivity::class.java)) } }Ahora mi código finalmente funcionó, pero parece que no puedo entender por qué tuve que usar context.startActivity() . Me gustaría entender cuándo puedo usar startActivity() así y cuándo necesito usar context.startActivity() .
Esto se debe a que el método startActivity() es miembro de la clase Activity y no RecyclerView , simplemente no existe allí.
Por cierto, una mejor manera de iniciar una actividad desde un clic de RecyclerView es a través de una devolución de llamada.
En primer lugar, Contexto es el estado actual de la aplicación/objeto.
Interfaz a la información global sobre un entorno de aplicación.
Esta es una clase abstracta cuya implementación la proporciona el sistema Android.
Permite el acceso a recursos específicos de la aplicación, como colores, recursos de cadena, acceso a bases de datos y clases, así como llamadas ascendentes para operaciones a nivel de aplicación, como actividades de lanzamiento, intentos de transmisión y recepción, etc.
El contexto es la clase base para Actividad, Servicio, Aplicación, etc. si verifica dentro de AppCompatActivity y Fragment. entonces se puede encontrar el método startActivity() dentro de él.
En tu caso:
En el adaptador, si necesita obtener acceso a la base de datos, escriba res, por ejemplo: context.getResources().getString(R.string.yourstring);
color necesario para establecer en la vista en tiempo de ejecución, por lo que debe necesitar que el estado actual de la aplicación/objeto sea contexto de llamada y contexto es una superclase.
Puede obtener acceso al contexto de tres formas en el adaptador.
Pase Contexto como argumento al Adaptador y manténgalo como campo de clase.
Use la inyección de dependencia para inyectar contexto cuando lo necesite. Recomiendo encarecidamente leer sobre it.eg: Android Hilt.
Al final,
Espero que pueda ser útil para usted.