1.将loadRoot和loadDirectory两个方法合并为loadDirectory(),本质上都是加载一个目录

2.发现不管怎么加载都是根目录的内容,随后发现是之前的一个错误想法:在当前的fragment刷新布局,然后原来的布局压栈,虽然找到了navigation的方法,但是为了节约资源将FileAdapter设置为单例模式没有改回来.
master
ThankVinci 4 years ago
parent 899b9ff899
commit d1ceca0205

@ -1,9 +1,6 @@
package com.thankvinci.CloudKey.Files;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -12,14 +9,12 @@ import android.widget.TextView;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.navigation.Navigation;
import androidx.recyclerview.widget.RecyclerView;
import com.thankvinci.CloudKey.Fragment.FileManageFragment;
import com.thankvinci.CloudKey.R;
import java.io.File;
import java.util.List;
public class FileAdapter extends RecyclerView.Adapter<FileAdapter.ViewHolder> {
@ -40,16 +35,6 @@ public class FileAdapter extends RecyclerView.Adapter<FileAdapter.ViewHolder> {
name = file.findViewById(R.id.file_name);
}
}
public static FileAdapter getInstance(List<FileItem> fileList,Fragment fragment){
if(adapter != null){
return adapter;
}
adapter = new FileAdapter(fileList,fragment);
return adapter;
}
public void setFileList(List<FileItem> fileList){
this.fileList = fileList;
}
public FileAdapter(List<FileItem> fileList,Fragment fragment){
this.fileList = fileList;
this.fragment = fragment;
@ -65,14 +50,16 @@ public class FileAdapter extends RecyclerView.Adapter<FileAdapter.ViewHolder> {
public void onClick(View v){
int position = holder.getAdapterPosition();
FileItem fitem = fileList.get(position);
Toast.makeText(v.getContext(),fitem.getName(),Toast.LENGTH_SHORT).show();
//Toast.makeText(v.getContext(),fitem.getName(),Toast.LENGTH_SHORT).show();
if(fitem.isDir()){
StringBuilder builder = new StringBuilder();
builder.append(((FileManageFragment)fragment).getDir());
builder.append("/");
builder.append(fitem.getName());
data.putString("dir",builder.toString());
data.putBoolean("isRoot",false);
Toast.makeText(v.getContext(),data.getString("dir"),Toast.LENGTH_SHORT).show();
Navigation.findNavController(v).navigate(R.id.action_openDir,data);
}else{
Toast.makeText(v.getContext(),"没有打开除文件夹和压缩包以外的功能",Toast.LENGTH_SHORT).show();

@ -32,4 +32,7 @@ public class FileItem {
public boolean isDir(){
return !type;
}
public boolean isZip(){
return isZip;
}
}

@ -33,7 +33,6 @@ public class FileManageFragment extends Fragment {
private EditText path_edit;
private RecyclerView directoryView;
private List<FileItem> fileItemList;
private String fileNames[];
private File files[];
public FileManageFragment(){
@ -47,52 +46,26 @@ public class FileManageFragment extends Fragment {
directoryView = (RecyclerView)getView().findViewById(R.id.dir_list);
Bundle data = getArguments();
dir = data.getString("dir");
isRoot = data.getBoolean("isRoot");
Toast.makeText(getActivity(),dir+isRoot,Toast.LENGTH_SHORT).show();
if(isRoot){
loadRoot();
//Toast.makeText(getActivity(),"root",Toast.LENGTH_SHORT).show();
dir = Environment.getExternalStorageDirectory().getPath(); //获取根目录
}else{
loadDirectory(dir);
dir = data.getString("dir");
Toast.makeText(getActivity(),dir,Toast.LENGTH_SHORT).show();
}
initLayout();
loadDirectory();
}
public String getDir(){
return dir;
}
private void initLayout(){
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);
directoryView.setLayoutManager(layoutManager);
FileAdapter adapter = FileAdapter.getInstance(fileItemList,this);
adapter.setFileList(fileItemList);
directoryView.setAdapter(adapter);
}
private void loadRoot() {
//加载外部存储的根目录
public void loadDirectory(){
ActivityCompat.requestPermissions(getActivity(), new String[]{ //运行时权限
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE"}, 1);
String rootPath = Environment.getExternalStorageDirectory().getPath();
dir = rootPath;
path_edit.setText(dir);
File root = new File(rootPath);
files = root.listFiles();
if (files == null){
//当目录里为空时,列表为空对象
}else{
FileUtils.orderByName(files);
initDirectory();
}
}
public void loadDirectory(String path){
ActivityCompat.requestPermissions(getActivity(), new String[]{ //运行时权限
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE"}, 1);
path_edit.setText(path);
File directory = new File(path);
File directory = new File(dir);
files = directory.listFiles();
if (files == null){
//当目录里为空时,列表为空对象
@ -100,7 +73,7 @@ public class FileManageFragment extends Fragment {
FileUtils.orderByName(files);
initDirectory();
}
Toast.makeText(getActivity(),directory.canRead()+"",Toast.LENGTH_SHORT).show();
initLayout();
}
private void initDirectory(){
fileItemList = null;
@ -133,4 +106,10 @@ public class FileManageFragment extends Fragment {
}
}
}
private void initLayout(){
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);
directoryView.setLayoutManager(layoutManager);
FileAdapter adapter = new FileAdapter(fileItemList,this);
directoryView.setAdapter(adapter);
}
}

@ -219,5 +219,8 @@ public static final View.OnClickListener createNavigateOnClickListener(@IdRes in
返回一个OnClickListener,但是我是分文件和目录的,这个方法又不能重写,然后又找到了https://blog.csdn.net/m0_46962786/article/details/109119746这篇文章,这里面是在普通的OnClickListener中获取当前的Navigation的controller,然后调用navigate()方法去触发action和传递参数
**2021/6/9**
将loadRoot和loadDirectory两个方法合并为loadDirectory(),本质上都是加载一个目录
发现不管怎么加载都是根目录的内容,随后发现是之前的一个错误想法:在当前的fragment刷新布局,然后原来的布局压栈,虽然找到了navigation的方法,但是为了节约资源将FileAdapter设置为单例模式没有改回来.
Loading…
Cancel
Save