No es accesible en el contexto actual
Tengo el siguiente código
public abstract class BaseAdapter<T, V extends BaseAdapter.ViewHolder> extends ArrayAdapter<T> { public BaseAdapter(Context context, int resource, Collection<T> collection) { // typical constructor logic } // some other custom defined methods public static class ViewHolder { // custom defined logic } } public class ModelAdapter extends BaseAdapter<Model, ModelAdapter.ModelViewHolder> { public ModelAdapter(Context context, int resource, Collection<Model> collection) { super(context, resource, collection); // typical constructor logic } public static class ModelViewHolder extends ViewHolder { // custom defined logic } }
El BaseAdapter y el ModelAdapter están en archivos separados. El problema es que tengo un error de compilación al intentar definir el ModelAdapter: ModelViewHolder no es accesible en contexto actual
- Función de devolución de llamada Javascript a Android
- ¿Cómo proceso las emisiones que se enviaron mientras mi actividad se detuvo?
- Depuración de Eclipse: while continue after return statement?
- Evitar / prevenir que un fragmento se refresque al cambiar las pestañas
- Android El registro y reproducción de audio está dañado
Realmente no entiendo este error y no puedo entender lo que estoy haciendo mal. ¿Puede alguien explicarme este problema o un enlace que puede aclarar esta situación?
- Cómo incrustar el servidor i-jetty en la aplicación Android?
- GridView Obtener el elemento en el tacto
- Colorear botones en Android con AppCompat
- Intenta invocar el método virtual 'boolean com.google.android.finsky.api.model.DfeToc.isGplusSignupEnabled ()' en una referencia de objeto nulo
- Cómo hacer que la ruta de dibujo sea suave mientras se dibuja con un trazo de anchura variable
- API de calendario de Android insertar evento recurrente
- Extraer números de una cadena alfanumérica usando android
- Desempeño de Android: "Evita los internos y los setters"
Creación de Dead Lock
Utiliza ModelAdapter.ModelViewHolder
como parámetro de plantilla de BaseAdapter
y deja que ModelAdapter
extienda BaseAdapter
, entonces el compilador intentó crear ModelViewHolder
primero, pero la clase de ModelAdapter.ModelViewHolder
(el tipo es Class ) todavía no se ha creado. Debe esperar a que se cree ModelViewHolder
, porque ModelViewHolder
está en el ámbito de ModelAdapter
.
La forma de resolverlo es poner la clase ModelViewHolder
en un nuevo archivo * .java.
Sucedió lo mismo para mí al extender una clase Base. Pero esta vez lo tuve así (siguiendo el ejemplo dado en la pregunta)
BaseAdapter.java
public abstract class BaseAdapter<T, V extends BaseAdapter.ViewHolder> extends ArrayAdapter<T> { public BaseAdapter(Context context, int resource, Collection<T> collection) { // typical constructor logic } // some other custom defined methods public static class ViewHolder { // custom defined logic } }
ModelAdapter.java
import com.mypackage.ModelAdapter.ModelViewHolder; ***//NOTE THIS IMPORT!!!*** public class ModelAdapter extends BaseAdapter<Model, ModelAdapter.ModelViewHolder> { public ModelAdapter(Context context, int resource, Collection<Model> collection) { super(context, resource, collection); // typical constructor logic } public static class ModelViewHolder extends ViewHolder { // custom defined logic } }
De esa manera la advertencia se había ido y no necesitaba separar ModelViewHolder en otro archivo '.java'. Observe que están en dos archivos diferentes y la importación en ModelAdapter.java.
Creo que la respuesta de Fei Liang es parcialmente incorrecta porque ser ModelViewHolder estática debe hacer posible inicializar ModelViewHolder sin inicializar su clase padre ModelAdapter