fix: ScriptListView not update when file created or deleted

This commit is contained in:
hyb1996
2017-09-26 23:46:59 +08:00
parent 7616634e40
commit 18e7fceac6
2 changed files with 22 additions and 4 deletions

View File

@@ -9,8 +9,8 @@ android {
applicationId "com.stardust.scriptdroid" applicationId "com.stardust.scriptdroid"
minSdkVersion 17 minSdkVersion 17
targetSdkVersion 23 targetSdkVersion 23
versionCode 202 versionCode 203
versionName "3.0.0 Alpha3" versionName "3.0.0 Alpha4"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true multiDexEnabled true
ndk { ndk {

View File

@@ -25,6 +25,8 @@ import com.stardust.scriptdroid.ui.common.ScriptLoopDialog;
import com.stardust.scriptdroid.ui.common.ScriptOperations; import com.stardust.scriptdroid.ui.common.ScriptOperations;
import com.stardust.widget.BindableViewHolder; import com.stardust.widget.BindableViewHolder;
import org.greenrobot.eventbus.Subscribe;
import java.util.ArrayList; import java.util.ArrayList;
import butterknife.BindView; import butterknife.BindView;
@@ -51,6 +53,7 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
private ScriptFile mCurrentDirectory; private ScriptFile mCurrentDirectory;
private OnScriptFileClickListener mOnScriptFileClickListener; private OnScriptFileClickListener mOnScriptFileClickListener;
private ScriptFile mSelectedScriptFile; private ScriptFile mSelectedScriptFile;
private StorageFileProvider mStorageFileProvider;
public ScriptListView(Context context) { public ScriptListView(Context context) {
super(context); super(context);
@@ -80,7 +83,9 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
mScriptListView = new RecyclerView(getContext()); mScriptListView = new RecyclerView(getContext());
addView(mScriptListView); addView(mScriptListView);
initScriptListRecyclerView(); initScriptListRecyclerView();
setCurrentDirectory(StorageFileProvider.getDefault().getInitialDirectory()); mStorageFileProvider = StorageFileProvider.getDefault();
setCurrentDirectory(mStorageFileProvider.getInitialDirectory());
mStorageFileProvider.registerDirectoryChangeListener(this);
} }
private void initScriptListRecyclerView() { private void initScriptListRecyclerView() {
@@ -104,7 +109,7 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
private void loadScriptList() { private void loadScriptList() {
mScriptFiles.clear(); mScriptFiles.clear();
mDirectories.clear(); mDirectories.clear();
StorageFileProvider.getDefault().getDirectoryScriptFiles(mCurrentDirectory) mStorageFileProvider.getDirectoryScriptFiles(mCurrentDirectory)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe(new SimpleObserver<ScriptFile>() { .subscribe(new SimpleObserver<ScriptFile>() {
@@ -126,6 +131,13 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
}); });
} }
@Subscribe
void onDirectoryChange(StorageFileProvider.DirectoryChangeEvent event) {
if (event.directory.equals(mCurrentDirectory)) {
loadScriptList();
}
}
@Override @Override
public void onRefresh() { public void onRefresh() {
loadScriptList(); loadScriptList();
@@ -160,6 +172,12 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
return true; return true;
} }
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mStorageFileProvider.unregisterDirectoryChangeListener(this);
}
private class ScriptListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private class ScriptListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final int VIEW_TYPE_FILE = 0; private final int VIEW_TYPE_FILE = 0;