0

私はオーディオプレーヤーを構築しており、オーディオファイルを含むすべてのフォルダーに対して電話の内部ストレージを照会して表示するフラグメント「マイファイル」があります。私が行ったことは、「私のファイル」の断片にあります(私はrecyclerView内に)フォルダを表示します。このrecyclerViewのアイテム(フォルダ)をクリックすると、クリックされたフォルダのオーディオファイルを表示する別のアクティビティ(MyFilesSong.java)が開始されます。同じrecyclerViewに2人の異なるarraylistsのアイテムを表示するにはどうすればいいですか?

私が欲しいのは、フラグメントを "マイファイル"に表示したいのと同じです(すでに行っているように)、アイテム(フォルダ)をクリックすると、オーディオファイルを同じフラグメントにロードする必要がありますこれに対する別の活動が必要です)。私は私がはっきりしていることを望む

PS:「Songs.javaは」新しいを開く項目をクリックすると二GIF(鉱山)でsonginfomodel

を使用しながら、二つのrecyclerviewsが使用され、それらの両方が異なる各種タイプ - 「MyFilesフォルダ」のArrayListのを持っているがfoldermodelを使用していますアクティビティ。しかし、私は最初のものに実装されているものが欲しいです。フラグメントにはフォルダが表示され、フォルダをクリックするとオーディオファイルが表示されます。

MyFiles.java:

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.my_files_activity, container, false); 



    recyclerView= view.findViewById(R.id.recyclerView_files); 
    pathTextView= view.findViewById(R.id.myFilesPath); 

    myList = new ArrayList<Object>(); 

    linearLayoutManager=new LinearLayoutManager(getContext()); 
    recyclerView.setLayoutManager(linearLayoutManager); 






    Songpath = SongPath(); 

    for(int i = 0; i<Songpath.size();i++) { 

     Log.e("Paths: ", Songpath.get(i)); 

     file = new File( Songpath.get(i)) ; 

     try { 
      sforFolders = new FolderModel(file.getParentFile().getName(),file.getParentFile().getCanonicalPath()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     myList.add(sforFolders); 



    } 

    myFilesAdapter = new MyFilesAdapter(getContext(), new MyFilesAdapter.MyFilesItemClickListener() { 
     @Override 
     public void folderonclicklistener(FolderModel name, int position) { 

      Toast.makeText(getContext(), "Folder Name: "+name.getFolderName()+" Position: "+position, Toast.LENGTH_SHORT).show(); 

      Intent i = new Intent(getContext(),MyFilesSongs.class); 
      i.putExtra("parentPath",name.getFolderPath()); 
      startActivity(i); 


     } 
    }); 

    recyclerView.setAdapter(myFilesAdapter); 
    myFilesAdapter.getFilesFolders(myList); 
    myFilesAdapter.notifyDataSetChanged(); 







    return view; 
    } 

MyFilesAdapter.java:

public class MyFilesAdapterFinal extends RecyclerView.Adapter<MyFilesAdapterFinal.ViewHolder> { 

ArrayList<FolderModel> SongParentPath = new ArrayList<>(); 
Context context; 
itemClickListener listener; 

public MyFilesAdapterFinal(ArrayList<FolderModel> songParentPath, Context context,itemClickListener listener) { 
    SongParentPath = songParentPath; 
    this.context = context; 
    this.listener = listener; 
} 

@Override 
public MyFilesAdapterFinal.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View v = LayoutInflater.from(context).inflate(R.layout.row_myfiles,parent,false); 

    return new ViewHolder(v); 
} 

@Override 
public void onBindViewHolder(MyFilesAdapterFinal.ViewHolder holder, int position) { 

    FolderModel name = SongParentPath.get(position); 

    holder.rowtext.setText(String.valueOf(name.getFolderName())); 
    holder.bind(name,listener); 





} 

@Override 
public int getItemCount() { 
    return (SongParentPath==null)? 0 : SongParentPath.size(); 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 

    TextView rowtext; 

    public ViewHolder(View itemView) { 
     super(itemView); 

     rowtext = itemView.findViewById(R.id.rowtext); 
    } 

    public void bind(final FolderModel name, final itemClickListener listener) { 

     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       listener.onClick(name,getLayoutPosition()); 
      } 
     }); 
    } 
} 

public interface itemClickListener{ 

    void onClick(FolderModel name, int position); 
} 

Songs.java:(オーディオファイルを一覧表示アクティビティ):

protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    LayoutInflater inflater = LayoutInflater.from(this); 
    View view6 = inflater.inflate(R.layout.songs_activity, null); 
    FrameLayout container6 = (FrameLayout) findViewById(R.id.container); 
    container6.addView(view6); 



    recyclerView = findViewById(R.id.recyclerView); 
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext()); 
    recyclerView.setLayoutManager(linearLayoutManager); 

    String parentPath = getIntent().getExtras().getString("parentPath"); 

    SongList = displayFolderFiles(parentPath); 



    songAdapter = new SongAdapter(getApplicationContext(), SongList, new SongAdapter.RecyclerItemClickListener() { 
     @Override 
     public void onClickListener(SongInfoModel song, int position) { 




      Toast.makeText(getApplicationContext(), song.getSongName(), Toast.LENGTH_SHORT).show(); 


      BaseActivity.setsongText(song); 
      BaseActivity.ButtonPause(); 
     //  playAudio(position); 
      BaseActivity.slidingUpPanelCollapsed(); 





     } 

     @Override 
     public void onLongClickListener(final SongInfoModel song, final int position, View v) { 



      // AddToPlayListDialog(song, v); 


     } 


    }); 


    recyclerView.setAdapter(songAdapter); 

} 

SongsAdapter.java:

 public class SongAdapter extends RecyclerView.Adapter<SongAdapter.SongHolder> { 

ArrayList<SongInfoModel> SongList = new ArrayList<>(); 
Context context; 
private RecyclerItemClickListener listener; 








public SongAdapter(Context context, ArrayList<SongInfoModel> SongList, RecyclerItemClickListener listener) { 

    this.context = context; 
    this.SongList = SongList; 
    this.listener = listener; 

} 




@Override 
public SongAdapter.SongHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(context).inflate(R.layout.row_song, parent, false); 
    return new SongHolder(view); 
} 

@Override 
public void onBindViewHolder(final SongAdapter.SongHolder holder, final int position) { 



     final SongInfoModel songInfoModel = SongList.get(position); 


     holder.songName.setText(songInfoModel.SongName); 
     holder.artistName.setText(songInfoModel.ArtistName); 
     holder.duration.setText(String.valueOf(songInfoModel.duration)); 
     String duration = Utility.convertDuration(songInfoModel.getDuration()); 
     holder.duration.setText(duration); 
     Picasso.with(context).load(songInfoModel.getAlbumIDArtwork()).placeholder(R.drawable.ic_launcher).into(holder.iv_artwork); 
     holder.bind(songInfoModel, listener); 






} 

@Override 
public int getItemCount() { 
    return SongList.size(); 
} 

public class SongHolder extends RecyclerView.ViewHolder { 
    TextView songName; 
    TextView artistName; 
    TextView duration; 
    private ImageView iv_artwork; 



    public SongHolder(View itemView) { 

     super(itemView); 
     songName = (TextView)itemView.findViewById(R.id.SongName); 
     artistName= (TextView)itemView.findViewById(R.id.ArtistName); 
     duration = (TextView) itemView.findViewById(R.id.duration); 
     iv_artwork = (ImageView) itemView.findViewById(R.id.iv_artwork); 


    } 

    public void bind(final SongInfoModel songInfoModel, final RecyclerItemClickListener listener) { 
     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       listener.onClickListener(songInfoModel, getLayoutPosition()); 

      } 
     }); 

     itemView.setOnLongClickListener(new View.OnLongClickListener() { 

      @Override 
      public boolean onLongClick(View view) { 

       listener.onLongClickListener(songInfoModel, getLayoutPosition(),view); 
       return true; 
      } 
     }); 

    } 

} 

public interface RecyclerItemClickListener{ 

    void onClickListener(SongInfoModel songInfoModel, int position); 
    void onLongClickListener(SongInfoModel songInfoModel, int position, View view); 

+0

代わりclicklistenerにオープンの新しい活動の断片を交換するフラグメントのトランザクションを作成します。 – Aiapaec

+0

コードの例を教えてもらえますか? – Rektirino

+0

MyFilesSongsクラスをフラグメントとして変更し、既存のフラグメントを新しいフラグメントで置換します。 –

答えて

0

まず、その活動に、ここでは、拡張可能なリサイクラービューの実装に関するあらゆる問題を抱えている場合は、私はこのことができます願ってい を助けるお気軽にお問い合わせいけないリンク

Expandable RecyclerView

ですそれはAppCompatActiだことを確認します(お使いの断片の両方がちょうど活動に、あなたがメインコンテナとしてそれで行くrecyclerViewsされているので

<FrameLayout android:id="@+id/fragment_change" 
android:layout_width="match_parent" android:fitsSystemWindows="true" 
android:layout_height="match_parent"/> 

:両方はあなたがこれを追加する必要がありますrecyclerviews開催

SupportFragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
FolderListFragment fragment = new FolderListFragment(); 
fragment.setArguments(bundle); 
fragmentTransaction.replace(R.id.fragment_change, fragment); 
fragmentTransaction.commit(); 

そしてfoldersAdapterからあなたの代わりにアクティビティを呼び出すのでは、これで行く必要があります:VITY)、あなたはこの呼び出し

SupportFragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
FilesListFragment fragment = new FilesListFragment(); 
Bundle bundle = new Bundle(); 
bundle.putInt("parentPath",name.getFolderPath()); 
fragment.setArguments(bundle); 
fragmentTransaction.replace(R.id.fragment_change, fragment); 
fragmentTransaction.commit(); 

をとファイルのRecyclerViewを保持している活動が拡張する必要があります断片。フラグメントのOnCreateのオン

Bundle bundle = this.getArguments(); 
if (bundle != null) { 
     int myInt = bundle.getString("parentPath", defaultValue); 
} 
+0

実際には、MainActivity.javaはフラグメント "MyFiles"をホストし、Songs.javaはMainActivityのような独立したアクティビティです。 – Rektirino

+0

MyFilesはフラグメントですが、Songs.javaはアクティビティです – Rektirino

+0

そして、最初のGIFで見られるように、すべてのフラグメントがビューページ(tablayout)にあります – Rektirino

0

私はソリューションとしてExpandable Recycler Viewを使用したいと思うかもしれません。 )

+0

いいえ、私はExpandable Recycler Viewが何をしているのか分かります。私の質問をもう一度お読みください – Rektirino

+0

ああ、申し訳ありませんが、私はそれを助けることができる場合は、断片を実装するだけで、同じアクティビティでオーディオのリスト(またはあなたが持っているモデルのリスト)を表示するために、 – Aliy

+0

問題はありませんが、断片で私を助けることができますか? – Rektirino

関連する問題