Logcat d'erreur: “addView(Vue, LayoutParams) n'est pas pris en charge dans AdapterView” dans une ListView
Je suis en train de faire une application pour Android et quelque chose que j'ai besoin, c'est qu'il montre une liste de tous les fichiers et répertoires de la Carte SD et il doit être capable de se déplacer à travers les différents répertoires. J'ai trouvé un bon tutoriel en anddev. J'ai modifié quelques choses de sorte que la demande se déplace dans la Carte SD et non dans Android racine des Répertoires, mais le reste est essentiellement le même.
C'est mon fichier xml pour l'activité:
<?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>
Et ceci est le code de l'Activité:
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);
}
}
}
Je ne reçois pas toutes les erreurs dans Eclipse, mais j'ai un Force Close lors de l'exécution de l'application sur mon téléphone et quand je regarde Logcat je vois les suivantes:
01-01 23:30:29.858: ERREUR/AndroidRuntime(14911): FATAL EXCEPTION: les principaux
01-01 23:30:29.858: ERREUR/AndroidRuntime(14911): java.lang.UnsupportedOperationException: addView(Vue, LayoutParams) n'est pas pris en charge dans AdapterView
Je n'ai pas la moindre idée de quoi faire, j'ai regardé sur Google et je ne trouve rien et j'ai fait la même à stackoverflow. C'est ma première application en Java et Android, donc je suis un vrai n00b et si la réponse était là, je ne comprenais pas, alors je serais vraiment reconnaissant si vous pourriez nous expliquer ce que je dois faire pour corriger cette erreur et pourquoi.
Merci pour tout à l'avance.
Vous devez vous connecter pour publier un commentaire.
Lors de la création d'un ArrayAdapter comme la vôtre, la ArrayAdapter a besoin d'une mise en page de ressources contenant un TextView.
Essayez de changer votre ArrayAdapter création avec:
et voir si cela fonctionne.
Pour d'autres qui ont ce problème et ont gonflé une mise en page dans
ArrayAdapter
'sgetView
, définir laparent
paramètrenull
, comme dansview = inflater.inflate(R.layout.mylayout, null);
Règle de pouce
Vous devriez toujours essayer de passer à un parent tout en gonflant un point de Vue, sinon, le cadre ne sera pas en mesure d'identifier la mise en page paramètres à utiliser pour que gonflé vue.
La façon correcte de la manipulation de l'exception en passant faux comme troisième paramètre, ce drapeau indique si une vue doit être ajouté directement dans le passé conteneur ou pas.
Dans le cas d'un adaptateur, l'adaptateur lui-même va ajouter de la vue après avoir retourné la vue de vous méthode getview:
BaseAdapter exemple, vient de juste pour nous DevBytes:
CursorAdapter exemple:
Plus d'informations sur l'affichage de l'inflation peut être trouvé dans ce l'article.
Supprimer TextView De ListView dans votre fichier XML
mon problème était le suivant: je remplace getView dans arrayAdapter. puis, quand j'ai gonflé, j'ai oublié de le mettre joindre à la racine de faux et qui a causé cette exception.
c'est de cette façon doit être fait:
après que le problème est résolu!