Error de Logcat: "addView (View, LayoutParams) no es compatible con AdapterView" en un ListView

Estoy haciendo una aplicación para Android y algo que necesito es que muestra una lista de todos los archivos y directorios en la tarjeta SD y tiene que ser capaz de moverse a través de los diferentes directorios. He encontrado un buen tutorial en anddev . He modificado algunas cosas para que la aplicación se mueva en la tarjeta SD y no en los directorios de la raíz de Android, pero el resto es mayormente el mismo.

Este es mi archivo xml para la actividad:

<?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" /> </ListView> 

Y este es el código para la Actividad:

  import hackreatorz.cifrador.R; import java.io.File; import java.util.ArrayList; import android.app.ListActivity; import android.content.res.Configuration; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class ArchivosSD extends ListActivity { private ArrayList<String> directoryEntries = new ArrayList<String>(); private File currentDirectory = new File("/sdcard/"); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); browseToSD(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } private void browseToSD() { browseTo(new File("/sdcard/")); } private void upOneLevel() { if(this.currentDirectory.getParent() != null) this.browseTo(this.currentDirectory.getParentFile()); } private void browseTo(final File directory) { if (directory.isDirectory()) { this.currentDirectory = directory; fill(directory.listFiles()); } else { Toast.makeText(ArchivosSD.this, this.directoryEntries.get(this.getSelectedItemPosition()), Toast.LENGTH_SHORT).show(); } } private void fill(File[] files) { this.directoryEntries.clear(); this.directoryEntries.add(getString(R.string.current_dir)); if(this.currentDirectory.getParent() != null) this.directoryEntries.add(getString(R.string.up_one_level)); int currentPathStringLength = (int) this.currentDirectory.getAbsoluteFile().length(); for (File file : files) { this.directoryEntries.add(file.getAbsolutePath().substring(currentPathStringLength)); } setListAdapter(new ArrayAdapter<String>(this, R.layout.archivos_sd, this.directoryEntries)); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { int selectionRowID = (int) this.getSelectedItemPosition(); String selectedFileString = this.directoryEntries.get(selectionRowID); if (selectedFileString.equals(".")) { this.browseToSD(); } else if(selectedFileString.equals("..")) { this.upOneLevel(); } else { File clickedFile = null; clickedFile = new File(this.currentDirectory.getAbsolutePath() + this.directoryEntries.get(selectionRowID)); if(clickedFile != null) this.browseTo(clickedFile); } } } 

No obtengo ningún error en Eclipse, pero recibo un Force Close al ejecutar la aplicación en mi teléfono y cuando miro a Logcat veo lo siguiente:

01-01 23: 30: 29.858: ERROR / AndroidRuntime ( 14911): java.lang.UnsupportedOperationException: addView (View, LayoutParams) no es Compatible con AdapterView

No tengo ni idea de qué hacer, busqué en Google y no encontré nada y hice lo mismo en stackoverflow. Esta es mi primera aplicación en Java y para Android por lo que soy un n00b real y si la respuesta estaba allí, no lo entendía así que realmente apreciaría si pudiera explicar lo que debo hacer para solucionar este error y por qué.

Gracias por todo por adelantado.

Al crear un ArrayAdapter como el tuyo, el ArrayAdapter necesita un recurso de diseño que contenga sólo un TextView. Pruebe a cambiar la creación de ArrayAdapter con:

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, this.directoryEntries));

Y ver si funciona.

Para otros que tienen este problema y han inflado un diseño en el ArrayAdapter de getView , establezca el parámetro parent en null , como en view = inflater.inflate(R.layout.mylayout, null);

Regla de oro

Siempre debe intentar pasar a un padre mientras infla una vista, de lo contrario el marco no será capaz de identificar qué params de diseño para utilizar para esa vista inflada.

La manera correcta de manejar la excepción es pasar false como tercer parámetro , este indicador indica si una vista debe agregarse directamente al contenedor pasado o no.

En el caso de un adaptador, el propio adaptador agregará la vista después de devolver la vista desde el método getview:

View = inflater.inflate (R.layout.mylayout, parent, false );

BaseAdapter muestra, proviene de DevBytes just-for-us :

  @Override public View getView(int position, View convertView, ViewGroup parent) { View result = convertView; if (result == null) { result = mInflater.inflate(R.layout.grid_item, parent, false); } // Try to get view cache or create a new one if needed ViewCache viewCache = (ViewCache) result.getTag(); if (viewCache == null) { viewCache = new ViewCache(result); result.setTag(viewCache); } // Fetch item Coupon coupon = getItem(position); // Bind the data viewCache.mTitleView.setText(coupon.mTitle); viewCache.mSubtitleView.setText(coupon.mSubtitle); viewCache.mImageView.setImageURI(coupon.mImageUri); return result; } 

CursorAdapter muestra:

  @Override public View newView(final Context context, final Cursor cursor, final ViewGroup root) { return mInflater.inflate(R.layout.list_item_ticket, root, false); } 

Más información sobre la inflación de la vista se puede encontrar en este artículo .

  • Implementación de setselection de customvisionview en Android
  • Cómo obtener objeto de listview en setOnItemClickListener en android?
  • Spinner: obtener estado o recibir notificación cuando se abre
  • Actualizar dinámicamente los tipos de vista de ListView
  • No se pueden dibujar vistas secundarias en el grupo de vistas cuando se utiliza la vista del adaptador
  • AdapterView.OnItemClickListener con más ListView
  • Cómo obtener texto de autocompletar textview android
  • Android: stackFromBottom = "true" no parece funcionar perfectamente (revertir ListView con el adaptador)
  • Uso correcto de setEmtpyView en AdapterView
  • No se puede iniciar la actividad: UnsupportedOperationException: addView (View, LayoutParams) no es compatible con AdapterView
  • Configuración de android: windowBackground a @ null hace desplazamiento a mancha?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.