gpt4 book ai didi

android - FileObserver 不对更改使用react

转载 作者:行者123 更新时间:2023-11-29 22:24:10 25 4
gpt4 key购买 nike

我遇到了以下问题:

在我的 Activity 中,我有一个列出外部文件目录内容的 ListView 。我希望列表在内容发生任何变化时立即更新,所以我有:

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();
}
}

作为我 Activity 的内部类

在我的 onCreate 中我做了:

this.mFileBrowser = (ListView) this.findViewById(R.id.listview_filebrowser);
....
this.mFileAdapter = new FileAdapter();
this.mFileBrowser.setAdapter(this.mFileAdapter);

在 onResume() 中我会:

this.mFileAdapter.startWatching();

据我所知,这应该会导致我的 ListView 在从外部文件目录中删除文件后立即自动重新加载,例如。但它不起作用!

最佳答案

另一件需要注意的事情是,不支持为同一路径创建多个 FileObserver 实例,这可能会导致某些竞争条件。因此,如果有可能针对同一目录多次调用此代码,您可能会遇到问题。

关于android - FileObserver 不对更改使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6404390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com