0

以下のリンクをたどってファイルを選択させようとしました http://www.dreamincode.net/forums/topic/190013-creating-simple-file-chooser/

ただし、「コンテンツには、id属性が「android.R.id.list」であるListViewが必要です」というエラーが発生しました。

エラーをグーグルで検索しました。xmlファイルでlistviewタグを取得する必要があります。ただし、上記の例にはそれがなく、うまく機能しているようです。

メインページでファイルチューザーをトリガーしていませんが、私のコードはそれほど違いはないと思います。この問題を解決する方法があるかどうかを確認するのを手伝ってもらえますか?

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();
 }
}

fileArrayAdapterはリンクとまったく同じです。

ご協力ありがとうございました

4

2 に答える 2

1

更新:

クラスはListActivityを拡張しているため、ListViewが必要です。しかし、あなたのレイアウトファイル(file_view)からわかるように、それは1つ欠けています。したがって、レイアウトファイルにListViewを追加し、そのid属性を「@ android:id/list」に設定します。

于 2010-11-15T11:11:07.823 に答える
0

この行のせいです:

setContentView(R.layout.file_view);

file_view.xmlは、リスト自体のレイアウトではなく、リスト内の各アイテムのレイアウトです。ListActivityをオーバーライドしているので、ビューを設定する必要はありません。したがって、上記の行を削除するだけで十分です。

于 2010-11-15T11:12:55.630 に答える