我遇到以下問題:FileObserver不會對變化做出反應
在我的Activity中,我有一個列表視圖,列出了外部文件目錄的內容。 我想任何一種變化中的內容發生儘快更新列表,所以我必須:
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自動重新加載。 但它不起作用!
有一點需要注意......文件查找顯示文檔對於通過子目錄遞歸查看的更改是不正確的..他們只能在目標目錄中看到。 – DJC