2010-11-15 7 views
0

j'ai essayé de faire un fichier choisir suivant le lien ci-dessous http://www.dreamincode.net/forums/topic/190013-creating-simple-file-chooser/Une erreur au sujet listview

Cependant, je suis l'erreur « Votre contenu doit avoir un ListView dont l'attribut id est « android.R.id.list » "

J'ai googlé l'erreur et j'ai besoin d'obtenir une balise listview dans le fichier xml. Cependant, l'exemple ci-dessus ne l'a pas et il semble bien fonctionner.

Bien que je ne déclenche pas le sélecteur de fichiers dans la page principale, je pense que mon code n'a pas beaucoup de différences. Pourriez-vous m'aider à voir s'il y a des moyens de résoudre ce problème, s'il vous plaît?

file_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
<TextView android:id="@+id/fd_text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:textStyle="bold" android:layout_marginTop="5dip"></TextView> 
<TextView android:id="@+id/fd_text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dip"></TextView> 
</LinearLayout> 

filechooser.java

public class filechooser extends ListActivity{ 
private fileArrayAdapter adapter; 
private File curDir; 


@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.file_view); 
    curDir = new File("/sdcard/"); 
    fill(curDir); 
} 

public void fill(File f){ 
    File[] dirs = f.listFiles(); 
    this.setTitle("Current Dir: "+f.getName()); 
    List<fc_option>dir = new ArrayList<fc_option>(); 
    List<fc_option>fls = new ArrayList<fc_option>(); 
    try{ 
    for (File ff: dirs){ 
    if (ff.isDirectory()) 
    dir.add(new fc_option(ff.getName(), "Folder", ff.getAbsolutePath())); 
    else 
    fls.add(new fc_option(ff.getName(), "File Size: " + ff.length(), ff.getAbsolutePath())); 
    } 

    }catch (Exception e){ 

    } 

    Collections.sort(dir); 
    Collections.sort(fls); 
    dir.addAll(fls); 
    if (!f.getName().equalsIgnoreCase("sdcard")) 
    dir.add(0,new fc_option("..","Parent Directory", f.getParent())); 

    adapter = new fileArrayAdapter(this, R.layout.file_view, dir); //get problems 
    this.setListAdapter(adapter); 

} 

//@Override 
protected void onListItemClick(ListView l, View v, int position, long id){ 
    super.onListItemClick(l,v,position, id); 
    fc_option o = adapter.getItem(position); 
    if (o.getData().equalsIgnoreCase("folder") || o.getData().equalsIgnoreCase("parent directory")){ 
    curDir = new File(o.getPath()); 
    fill(curDir); 
    }else{ 
    onFileClick(o); 
    } 
} 

private void onFileClick(fc_option o){ 
    Toast.makeText(this,"File Click"+o.getName(), Toast.LENGTH_SHORT).show(); 
} 
} 

le fileArrayAdapter est exactement le même que le lien.

Merci pour votre aide

Répondre

0

Cette ligne est à blâmer:

setContentView(R.layout.file_view); 

Le file_view.xml est la mise en page pour chaque élément de la liste, et non la mise en page de la liste elle-même. Puisque vous substituez une ListActivity, vous n'avez pas besoin de définir la vue, donc il suffit de supprimer la ligne ci-dessus.

+0

Non, ce n'est pas le fichier de disposition pour les articles seulement. Comme il est défini par setContentView, il définit l'ensemble de la mise en page. – Mudassir

+0

Dans l'article que vous avez lié, il n'y a pas setContentView dans OnCreate de ListActivity. L'auteur utilise file_view.xml comme la disposition de chaque élément individuel et non comme la disposition de la liste. – kgiannakakis

1

Mises à jour:

Depuis votre classe étend la ListActivity, il doit avoir une ListView. Mais comme je peux le voir dans votre fichier layout (file_view), il en manque un. Ajoutez donc un ListView dans votre fichier de mise en page et définissez son attribut id sur "@android: id/list".