【发布时间】:2023-03-06 04:20:01
【问题描述】:
我正在构建一个音乐应用程序,它有一个标签布局,标签是作为片段实现的。我使用 RecyclerView 在其中一个片段(MyFiles.java)中创建了一个文件浏览器。它显示了目录和文件,但问题是当我单击任何没有进入目录的目录时
截图如下:
MyFiles.java
public class My_Files extends Fragment {
private static final String TAG = "My_Files";
RecyclerView recyclerView_files;
private ArrayList<MyFilesModel> item = new ArrayList<>();
private ArrayList<String> path = new ArrayList<>();
private String root;
private TextView myFilesPath;
MyFilesAdapter myFilesAdapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_files_activity, container, false);
recyclerView_files = view.findViewById(R.id.recyclerView_files);
myFilesPath = view.findViewById(R.id.myFilesPath);
root = Environment.getExternalStorageDirectory().getPath();
LinearLayoutManager mlinearLayoutManager = new LinearLayoutManager(getContext());
recyclerView_files.setLayoutManager(mlinearLayoutManager);
MyFilesAdapter myFilesAdapter = new MyFilesAdapter(getContext(), item, new MyFilesAdapter.FilePickerListener() {
@Override
public void onClickListener(MyFilesModel myFilesModel, int positionFiles) {
File file = new File(path.get(positionFiles));
if (file.isDirectory())
{
if(file.canRead()){
getDir(path.get(positionFiles));
}else{
Toast.makeText(getContext(), "Can't open", Toast.LENGTH_SHORT).show();
}
}else {
//play music
}
}
});
getDir(root);
recyclerView_files.setAdapter(myFilesAdapter);
return view;
}
private void getDir(String dirPath)
{
myFilesPath.setText("Location: " + dirPath);
MyFilesModel myFilesModel;
File f = new File(dirPath);
File[] files = f.listFiles();
if(!dirPath.equals(root))
{
myFilesModel = new MyFilesModel(root);
item.add(myFilesModel);
path.add(root);
myFilesModel = new MyFilesModel("../");
item.add(myFilesModel);
path.add(f.getParent());
}
for(int i=0; i < files.length; i++)
{
File file = files[i];
String filename = file.getName();
String ext = filename.substring(filename.lastIndexOf('.') + 1, filename.length());
if (!file.isHidden() && file.canRead()) {
path.add(file.getPath());
if (file.isDirectory()) {
myFilesModel = new MyFilesModel(file.getName() + "/");
item.add(myFilesModel);
} else {
if (ext.equals("mp3") || ext.equals("MP3")) {
myFilesModel = new MyFilesModel(file.getName());
item.add(myFilesModel);
}
}
myFilesAdapter.notifyDataSetChanged();
}
}
}
MyFilesAdapter.java:
public class MyFilesAdapter extends RecyclerView.Adapter<MyFilesAdapter.MyFilesHolder> {
Context fContext;
ArrayList<MyFilesModel> FileList = new ArrayList<>();
private FilePickerListener filePickerListener;
public MyFilesAdapter(Context fContext, ArrayList<MyFilesModel> fileList, MyFilesAdapter.FilePickerListener filePickerListener) {
this.fContext = fContext;
FileList = fileList;
this.filePickerListener = filePickerListener;
}
@Override
public MyFilesAdapter.MyFilesHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View fView = LayoutInflater.from(fContext).inflate(R.layout.row_myfiles, parent, false);
return new MyFilesHolder(fView);
}
@Override
public void onBindViewHolder(MyFilesAdapter.MyFilesHolder holder, int position) {
final MyFilesModel myFilesModel = FileList.get(position);
holder.myFilesText.setText(myFilesModel.getFileFolderName());
holder.bindFile(myFilesModel, filePickerListener);
}
@Override
public int getItemCount() {
return FileList.size();
}
public class MyFilesHolder extends RecyclerView.ViewHolder {
ImageView myFilesImage;
TextView myFilesText;
public MyFilesHolder(View itemView) {
super(itemView);
myFilesImage = itemView.findViewById(R.id.myFilesImage);
myFilesText = itemView.findViewById(R.id.myFilesText);
}
public void bindFile(final MyFilesModel myFilesModel, final FilePickerListener filePickerListener) {
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
filePickerListener.onClickListener(myFilesModel, getLayoutPosition());
}
});
}
}
public interface FilePickerListener{
void onClickListener( MyFilesModel myFilesModel, int positionFiles);
}
【问题讨论】:
-
如果您在 /storage/emulated/0/Android 中,我会看到 Music 和 Download 之类的目录,因为它们从不在 Android 目录中,这很奇怪。开始已经错了。
-
0 是内部存储,所以它当然会显示这些文件夹!我已经使用 ListView(不使用片段)尝试了这段代码并且它正在工作,但我似乎无法弄清楚 recyclerView(带有片段)
-
但我看到了.../Android。如果我看到 Android 是什么意思?通常,然后会显示 Android 目录的内容。你可以详细说明一下。
-
供你参考-android-er.blogspot.in/2012/07/…你可以看看
-
如果你懒得解释..再见。
标签: android android-fragments android-recyclerview android-music-player file-browser