0

ListView外部ストレージのすべてのフォルダーの名前を表示しています。アプリケーションによって新しいフォルダーが作成または削除されたときに、自動的に更新または更新したいのですが、ListViewそのレイアウト ファイルを再度開くまで、自動的に更新されません。Get Files () メソッドを使用してファイルを取得し、 で表示してListViewいます。今何をすればよいですか? すべてのフォルダを表示するためにこのコードを使用しています。

  try {
        ListView lv;
    File path=Environment.getExternalStorageDirectory();
    ArrayList<String> FilesInFolder = GetFiles(path);
    lv = (ListView)findViewById(R.id.filelist);
    final ArrayAdapter<String> array=new ArrayAdapter<String> (this,
            android.R.layout.simple_list_item_1, FilesInFolder);
    lv.setAdapter(array);
   }

ここにget files mathodがあります

   public ArrayList<String> GetFiles(String DirectoryPath) {
   ArrayList<String> MyFiles = new ArrayList<String>();
   File f = new File(DirectoryPath);
   f.mkdirs();
   File[] files = f.listFiles();
   for (int i=0; i<files.length; i++) 
       MyFiles.add(files[i].getName());

  return MyFiles;
}
4

2 に答える 2

0

このコードがすでに機能していると仮定します。

 ListView lv;
 File path=Environment.getExternalStorageDirectory();
 ArrayList<String> FilesInFolder = GetFiles(path);
 lv = (ListView)findViewById(R.id.filelist);
 final ArrayAdapter<String> array=new ArrayAdapter<String> (this,
 android.R.layout.simple_list_item_1, FilesInFolder);
 lv.setAdapter(array);

これで、配列を使用して arrayAdapter が作成されましたfilesInFolder。ビューを更新するには、アダプターが指している配列に項目を追加し、次の呼び出しを使用します。

array.notifyDatasetChanged();

データが更新されてデータが追加されたことをアダプターに通知し、リストの内容を再描画します。

更新のためにコードを少し変更することもできます。

public void updateList() {
            File f = new File(DirectoryPath);
            f.mkdirs();
            File[] files = f.listFiles();
            for (int i=0; i<files.length; i++) 
                    if (!FilesInFolder.contains(files[i].getName())
                        FilesInFolder.add(files[i].getName());
            array.notifyDatasetChanged();
}
于 2014-06-07T05:51:59.333 に答える
0

フォルダーをデータソースとして監視するローダーを使用して、より標準的なアプローチに従うことをお勧めします。CursorLoader を CursorAdapter と組み合わせて使用​​することもできますが、それはあなた次第です。ドキュメントはこちらにあります

于 2014-06-07T05:58:42.563 に答える