나는 탭 레이아웃이있는 음악 앱을 만들고 있는데 탭은 조각으로 구현됩니다. 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에있는 경우 Android 디렉토리에없는 음악과 다운로드 같은 디렉토리를 보는 것이 이상합니다. 시작이 이미 잘못되었습니다. – greenapps
0은 내부 저장소이기 때문에 이러한 폴더가 표시됩니다! 나는이 코드를 ListView (단편을 사용하지 않고)를 사용하여 시도했지만 작동하고 있지만 recyclerView (단편과 함께)를 알아낼 수는 없다. – Rektirino
하지만 .../Android. 안드로이드가 있다면 그것은 무엇을 의미합니까? 일반적으로 Android 디렉토리의 내용을 표시합니다. 당신은 그것에 대해 자세히 설명 할 수 있습니다. – greenapps