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

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

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