La clase interna es un adaptador, la clase interna-interna es el Oyente. ¿Cómo acceder (obscurecido) a los miembros/métodos del adaptador de Listener?Dos clases internas anónimas dobles anidadas. ¿Cómo conseguir miembros de la clase anónimos de primer nivel?
list.setAdapter(new Adapter() {
public View getView() {
// ...
button.setListener(new Listener() {
public void onClick() {
Adapter.this.remove(item);
}
);
}
});
Normalmente acceder a los miembros de clases externas, que acaba de decir Outer.this.member, pero en este caso me dio el siguiente error (utilizando la clase real):
error: not an enclosing class: ArrayAdapter
Entonces, ¿cómo se supone que debes acceder a los miembros de la clase interna de una clase interna-interna? No me gustan las clases anónimas anidadas de varios niveles, pero en este caso estoy aprendiendo una API nueva y todavía no estoy seguro de una forma más limpia. Ya tengo una solución, pero quería saber de todos modos. remove() no está realmente oscurecido por la clase inner-inner, por lo que la especificación de la clase no es realmente necesaria en este caso, pero quería dejar en claro en el código exactamente dónde está este método remove(). También quería saber en caso de que esté oscurecido. Creo que usar Outer.$6.remove()
funcionaría, pero tampoco creo que deba ser así.
Ya veo. Pensé que habría una sintaxis de lenguaje para utilizar con el fin de obtener en Adapter que yo no sabía. Por cierto 'que' tendría que ser final. – Chloe
Prefiero este enfoque, ya que es fácil de leer y explícito. – skrat
Aparece un error de compilación en la línea Adaptador que = Adaptador. Esto; (El adaptador no es una clase adjunta). En cambio, deberías estar diciendo Adaptador final que = esto ... si es que ... – sethu