0

私はタブレイアウトを持つ音楽アプリを構築しており、タブはフラグメントとして実装されています。 RecyclerViewを使用して、フラグメント(MyFiles.java)の1つにファイルブラウザを作成しました。それは、問題は、私はディレクトリのいずれかをクリックしたとき、それはフラグメントにファイルブラウザを実装できないのはなぜですか?

スクリーンショット以下のディレクトリに移動しないでディレクトリやファイルが、を示しています

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ディレクトリにはないので、MusicやDownloadのようなディレクトリが表示されるのは変です。開始はすでに間違っています。 – greenapps

+0

0は内部ストレージなので、これらのフォルダが表示されます。私はこのコードをListViewを使用して試しています(フラグメントを使用せずに)働いていますが、recyclerView(フラグメントあり)を理解できないようです。 – Rektirino

+0

しかし、私は見る.../Android。 Androidを見るとどういう意味ですか?通常、Androidディレクトリの内容を表示します。あなたはそれについて詳しく説明することができます。 – greenapps

答えて

0

ファイルをリストに追加した後、つまりgetDir(..)メソッドでファイルを追加した後に、adapter.notifyDataSetChanged()に電話する必要があります。

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

関連する問題