在上图中,第一个选项卡显示sdcard根目录中的文件/文件夹。我正在使用复选框来选择文件。问题是当我选择一个文件夹时,我想用所选文件夹文件的内容替换Recyclerview
内容。如果文件夹有子文件夹,则单击该文件夹应再次替换内容。基本上,我想要文件浏览器的功能。我还想让它记住哪些文件已被检查,因为这些文件将被发送到另一台设备。
显示现有Recyclerview
的代码非常简单。我正在将文件的ArrayList(在根目录中)分配给Recyclerview
适配器。
感谢任何帮助。感谢。
答案 0 :(得分:1)
如果您选择子文件夹,则可以重置Adapter
的数据。
示例:
现在,您要列出Path X /示例的文件/文件夹。因此,您始终将当前路径存储在适配器中,并创建一个名为update或类似的方法,其中输入是新路径。然后你更新适配器和瞧!如果用户决定从路径X /示例返回到路径X,则在最后一次出现“/".
时切断当前路径我将以伪代码向您演示:
class Adapter {
String path;
List<String> currFileNames;
void updateFiles(String destPath) {
path = destPath;
currFileNames = //Fetch file names from system
notifyDataSetChanged()
}
void goOneLevelUp() {
path = //substring path from X/example down to X
updateFiles(path)
}
}
如果你总是希望保留对路径X中“较旧”的fiels的引用,而不是总是替换它们,那么你可以按如下方式调整整个内容:
创建一个包含Path和List fileNames
的类class FileNameHolder {
String path
List<String> fileNames
}
在适配器中保留路径但替换列表
class Adapter {
String path;
List<FileNameHolder> fileNameHolders
List<String> currFileNames
void updateFiles(String destPath) {
path = destPath
if (fileNameHolders.has(path)) {
currFileNames = fileNameHolders.wherePathEquals(path).currFilenames
} else {
FileNameHolder holder = new FileNameHolder(path, fetchFileNamesFromSystemForPath(path))
fileNameHolders.add(fileNameHolder)
currFileNames = fileNameHolder.currFileNames
}
notifyDataSetChanged()
}
void goOneLevelUp() {
path = //substring path from X/example down to X
currFileNames = fileNameHolders.wherePathEquals(path).currFilenames
}
}
正如您在评论中提到的那样处理Backnavigation
的案例:
在适配器中添加一个名为backPressed()的公共方法,如下所示:
public boolean backPressed() {
if (path.contains("/")) { //assuming that - continuing our example X would be the root path and X/example would be one level down. so if the path contains a "/" you are not at the root level
goOneLevelUp()
return true
} else {
return false;
}
}
在Fragment / Activity
或RecyclerView
存在的任何地方覆盖onBackPressed(),如下所示:
@Override
onBackPressed() {
if (!recyclerView.getAdapter().backPressed()) {
super.onBackPressed()
}
}
只要您的RecyclerView Adapter
可以“消费”后退(更新数据),它就会返回true
。但是,如果文件路径位于根级别,它将返回false
,因此应调用superclass onBackPressed
(否则您将无法退出此视图)。
请记住,一切都是伪代码,直接写在我的脑海里。没有测试或任何东西。应该工作,否则请告诉我,我会编辑我的答案:)