2013-06-23 57 views
1

这里是我的代码浏览设备中的所有文件夹。Android的ListView适配器问题

private File file; 
private List<String> directoriesList; 
private ListView listView ; 
private ArrayAdapter<String> adapter; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.folder_browse_screen); 
    listView = (ListView) findViewById(R.id.foldersListView); 

    directoriesList = new ArrayList<String>(); 

    file = new File("/mnt"); 

    File list[] = file.listFiles(); 
    if (list != null && list.length >= 1) { 
     for (int i = 0; i < list.length; i++) { 
      File f = list[i]; 
      if (!f.isHidden() && f.canRead() && f.isDirectory()) { 
       directoriesList.add(f.getName()); 
      } 
     } 

     adapter = new ArrayAdapter<String>(this, R.layout.list_row, R.id.folder_name, directoriesList); 
     listView.setAdapter(adapter); 
} 

OnItemClick:

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 
    try { 
     File temp_file = new File(file, directoriesList.get(position)); 

     if (!temp_file.isHidden() && temp_file.canRead() && temp_file.isDirectory()) { 
      file = new File(file, directoriesList.get(position)); 
      File list[] = file.listFiles(); 
      directoriesList.clear(); 

      if (list != null && list.length >= 1) { 
       for (int i = 0; i < list.length; i++) { 
        File f = list[i]; 
        if (!f.isHidden() && f.canRead() && f.isDirectory()) { 
         directoriesList.add(f.getName()); 
        } 
       } 
       adapter.notifyDataSetChanged(); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

异常:java.lang.IllegalStateException:适配器的内容发生了变化,但ListView控件没有收到通知。确保适配器的内容不会从后台线程修改,而只能从UI线程修改。 [在ListView(2131034114,类android.widget.ListView)与适配器(类android.widget.ArrayAdapter)]

我在哪里使用线程?为什么这是强制关闭点击任何空文件夹?请帮帮我。

回答

3

我相信问题是,在onClick处理程序中,您总是清除()列表,但只有在所选目录不为空时才通知适配器。

因此,当单击一个空目录时,列表将被更改(清除),但不会通知适配器。

因此,错误消息“适配器的内容已更改,但ListView未收到通知”。

忽略关于线程的内容 - 这只是错误消息作者的猜测,并非您已从后台线程修改UI的权威性指示。

+0

辉煌。你解决了我的问题。非常感谢。 – Santhosh

+0

如果不是这个答案,就不会检查我的代码。希望我可以+1 100次! – Sufian