2010-11-15 50 views
0

錯誤我試圖讓一個文件選擇跟隨下面的鏈接 http://www.dreamincode.net/forums/topic/190013-creating-simple-file-chooser/一個關於列表視圖

但是,我得到了錯誤「您的內容必須有一個ListView其id屬性爲‘android.R.id.list’ 「

我google了錯誤,我需要在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是完全一樣的鏈接。

謝謝您的幫助

回答

0

此行是罪魁禍首:

setContentView(R.layout.file_view); 

的file_view.xml是列表中的每個項目,列表本身的不佈局的佈局。由於您重寫了ListActivity,因此您不必設置視圖,因此只需刪除上面的行即可。

+0

不,它不是隻有項目的佈局文件。由於它由setContentView設置,它定義了整個佈局。 – Mudassir 2010-11-15 11:15:07

+0

在您鏈接的文章中,ListActivity的OnCreate中沒有setContentView。作者使用file_view.xml作爲每個單獨項目的佈局,而不是作爲列表的佈局。 – kgiannakakis 2010-11-15 11:31:02

1

更新:

由於類是擴展ListActivity,它必須有一個ListView。但正如我從佈局文件(file_view)中可以看到的那樣,它缺少一個。因此,在佈局文件中添加一個ListView,並將其id屬性設置爲「@android:id/list」。

相關問題