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

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?

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

  • ¿Cómo comprobar si un servicio ya se está ejecutando o no en android?
  • Cómo cambiar todas las transiciones de actividad de una vez en la aplicación de Android?
  • Android / java Sqlite: ¿Cómo recuperar la fecha máxima?
  • Android: recupere la ruta de una imagen escogida
  • Actualización de Android de ListView
  • Inicio de Google Maps Direcciones a través de una intención en Android
  • Cómo integrar Mpesa Api con android
  • Conexión de http de Android con OkHttp No funciona
  • ¿Por qué no se establecen los permisos de AndroidManifest en mi aplicación?
  • Android TextUtils esEmpty vs String.isEmpty
  • Los objetos Json de Android / Java cuentan
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.