¿Es posible llamar al método que se define en Activity
desde ListAdapter
?
(Quiero hacer una Button
en la list's
fila y cuando se hace clic en este botón, se debería realizar el procedimiento, que se define en la actividad correspondiente. Traté de conjunto onClickListener
en mi ListAdapter
, pero no sé cómo llamar a este método, ¿cuál es su camino. ..)
cuando lo usé Activity.this.method()
, obtengo el siguiente error:
No enclosing instance of the type Activity is accessible in scope
Alguna idea ?
android
list
adapter
addressing
usuario1602687
fuente
fuente
Respuestas:
Sí tu puedes.
En el adaptador, agregue un nuevo campo:
En el adaptador Constructor agregue el siguiente código:
En el getView (...) de Adapter:
reemplace con sus propios nombres de clase donde vea su código, su actividad, etc.
Si necesita usar este mismo adaptador para más de una actividad, entonces:
Crea una interfaz
Implemente esta interfaz en las actividades que necesite para tener esta funcionalidad de llamada al método.
Luego, en Adapter getView (), llame como:
Estás listo. Si necesita usar este adaptador para actividades que no requieren este mecanismo de llamada, el código no se ejecutará (si la verificación falla).
fuente
Puedes hacerlo de esta manera:
Declarar interfaz:
Deje que su actividad la complemente:
Luego, pase su actividad a ListAdater:
Y en algún lugar del adaptador, cuando necesite llamar a ese método de actividad:
fuente
Original:
Entiendo la respuesta actual, pero necesitaba un ejemplo más claro. Aquí hay un ejemplo de lo que usé con un
Adapter
(RecyclerView.Adapter) y unActivity
.En tu actividad:
Esto implementará lo
interface
que tenemos en nuestroAdapter
. En este ejemplo, se llamará cuando el usuario haga clic en un elemento del archivoRecyclerView
.En su adaptador:
En
Activity
, iniciamos nuestroAdapter
y pasamos esto como argumento al constructor. Esto iniciará nuestrointerface
método de devolución de llamada. Puede ver que usamos nuestro método de devolución de llamada para los clics de los usuarios.fuente
EventBus
que sugieres?Básico y sencillo.
En su adaptador, simplemente use esto.
((YourParentClass) context).functionToRun();
fuente
Una forma más es:
Escriba un método en su adaptador, digamos public void callBack () {}.
Ahora, mientras crea un objeto para el adaptador en la actividad, anule este método. Se llamará al método de anulación cuando llame al método en el adaptador.
fuente
Para Kotlin:
En su adaptador, simplemente llame
fuente
esta condición le permitirá ejecutar algo si la Actividad que tiene la
GroupView
solicitud de vistas delgetView()
método de suadapter
esyourActivity
NOTA:
parent
es que GroupViewfuente
getView()
método ... así que obtenemos el contexto de ese GroupView y lo examinamos a través de la condición anteriorEn Kotlin ahora hay una forma más limpia mediante el uso de funciones lambda, sin necesidad de interfaces:
fuente