私は以下の問題を抱えています:FileObserverが変更に反応しません
私の活動では、外部ファイルディレクトリの内容をリスト表示するリストビューがあります。 私はリストは、すぐに変更のいずれかの種類がコンテンツに発生するように更新することにしたいので、私は持っている:
私の活動の内部クラスとして
public class FileAdapter implements ListAdapter {
private File mDirectory;
private FileObserver mFileObserver;
private DataSetObservable mDataSetObservable;
public FileAdapter() {
super();
this.mDirectory =
new ContextWrapper(ImportList.this).getExternalFilesDir(null);
if (this.mDirectory != null) {
this.mFileObserver =
new FileObserver(this.mDirectory.getAbsolutePath()) {
@Override
public void onEvent(int event, String path) {
new Handler().post(new Runnable() {
public void run() {
FileAdapter.this.mDataSetObservable.notifyChanged();
}
});
}
};
}
this.mDataSetObservable = new DataSetObservable();
}
public void startWatching() {
this.mFileObserver.startWatching();
}
public void stopWatching() {
this.mFileObserver.stopWatching();
}
public boolean areAllItemsEnabled() {
return true;
}
public boolean isEnabled(int position) {
return true;
}
public int getCount() {
return this.mDirectory == null ? 0 : this.mDirectory.listFiles().length;
}
public Object getItem(int arg0) {
return this.mDirectory.listFiles()[arg0];
}
public long getItemId(int position) {
return position;
}
public int getItemViewType(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ItemView itemView;
if (convertView == null) {
itemView = new ItemView(ImportList.this, 1);
} else {
itemView = (ItemView) convertView;
}
File file = (File) this.getItem(position);
itemView.setValue(0, file.getName());
return itemView;
}
public int getViewTypeCount() {
return 1;
}
public boolean hasStableIds() {
return false;
}
public boolean isEmpty() {
return this.getCount() < 1;
}
public void registerDataSetObserver(DataSetObserver observer) {
this.mDataSetObservable.registerObserver(observer);
}
public void unregisterDataSetObserver(DataSetObserver observer) {
this.mDataSetObservable.unregisterObserver(observer);
}
public String getPath() {
return this.mDirectory == null ?
ImportList.this.getResources().getString(R.string.no_external_files) :
this.mDirectory.getAbsolutePath();
}
}
と私は私のonCreateで:
this.mFileBrowser = (ListView) this.findViewById(R.id.listview_filebrowser);
....
this.mFileAdapter = new FileAdapter();
this.mFileBrowser.setAdapter(this.mFileAdapter);
そしてonResumeで ()私がやる:私は理解し
this.mFileAdapter.startWatching();
だから、これはすべきたとえば、ファイルが外部ファイルディレクトリから削除されると、ListViewが自動的にリロードされます。 しかし、それは動作しません!
メモ... lilの検索では、サブディレクトリを介して再帰的に表示されている変更についてドキュメントが間違っていることが明らかになりました。それらはターゲットディレクトリにのみ表示されます。 – DJC