0

나는 탭 레이아웃이있는 음악 앱을 만들고 있는데 탭은 조각으로 구현됩니다. RecyclerView를 사용하여 파편 중 하나 (MyFiles.java)에 파일 브라우저를 만들었습니다. 이 문제는 내가 디렉토리 중 하나를 클릭하면이조각에 파일 브라우저를 구현할 수없는 이유는 무엇입니까?

스크린 샷 아래의 디렉토리로 이동하지 않고있는 디렉토리와 파일 만 을 보여줍니다

enter image description here

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); 

} 
+0

/storage/emulated/0/Android에있는 경우 Android 디렉토리에없는 음악과 다운로드 같은 디렉토리를 보는 것이 이상합니다. 시작이 이미 잘못되었습니다. – greenapps

+0

0은 내부 저장소이기 때문에 이러한 폴더가 표시됩니다! 나는이 코드를 ListView (단편을 사용하지 않고)를 사용하여 시도했지만 작동하고 있지만 recyclerView (단편과 함께)를 알아낼 수는 없다. – Rektirino

+0

하지만 .../Android. 안드로이드가 있다면 그것은 무엇을 의미합니까? 일반적으로 Android 디렉토리의 내용을 표시합니다. 당신은 그것에 대해 자세히 설명 할 수 있습니다. – greenapps

답변

0

파일을 목록에 추가 한 후 adapter.notifyDataSetChanged()으로 전화해야합니다. 즉, getDir (..) 메소드에 파일을 추가해야합니다.

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 = 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(); 

     } 



    } 



} 
+0

시도 했음 .. 작동하지 않음 :( – Rektirino

+0

업데이트 된 코드를 게시 할 수 있습니까? –

+0

업데이트 됨! – Rektirino