-1

私は音楽アプリケーションを構築しています。私はRecyclerViewにそのアルバムのカバーを表示する "Album"フラグメントを持っています。私が望むのは、これらのアイテム(アルバムカバー)のいずれかをクリックすると、その特定のアルバムの曲を含む別のアクティビティ(albumsDetails.java)に移動する必要があります。これらの曲はすべてRecyclerViewに表示されます。 私はインテントの使い方を知っています。私は多くのことを試しましたが、どれも動作しません。recyclerViewのアイテムをクリックし、クリックしたアイテムの詳細を含む別のrecyclerViewに移動するにはどうすればいいですか?

私の質問には、アンドロイドスタジオにはまったく新しいものがありますのでご注意ください。

Album.java

リサイクラービュー・アダプタ内部
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.albums_activity, container, false); 

    recyclerViewAlbum = view.findViewById(R.id.albums_reyclerView); 
    recyclerViewAlbum.setHasFixedSize(true); 

    GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(),2); 
    recyclerViewAlbum.setLayoutManager(gridLayoutManager); 

    albumsAdapter = new AlbumsAdapter(SongList1,getContext(), new AlbumsAdapter.RecyclerItemClickListener() { 
     @Override 
     public void onClickListener(SongInfoModel song, int position) { 


      Intent i = new Intent(getContext(), AlbumDetails.class); 
      i.putExtra("SongName", song.getSongName()); 
      startActivity(i); 

      Activity activity = getActivity(); 
      if (activity instanceof MainActivity) {} 
     } 
    }); 

    Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0"; 
    Cursor cursor = getActivity().getContentResolver().query(uri, null, selection, null, null); 
    if (cursor != null) { 
     if (cursor.moveToFirst()) { 
      do { 
       String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); 
       String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); 
       long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); 
       String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); 
       String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); 
       long albumId = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)); 
       Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart"); 
       Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, albumId); 
       SongInfoModel s = new SongInfoModel(name, artist, null, album, null, duration, data,albumArtUri); 
       SongList1.add(s); 

      } while (cursor.moveToNext()); 
     } 

     cursor.close(); 
      Collections.sort(SongList1, new Comparator<SongInfoModel>() { 
      @Override 
      public int compare(SongInfoModel lhs, SongInfoModel rhs) { 
       return lhs.getAlbum().compareTo(rhs.getAlbum()); 
      } 
     }); 
    } 

    recyclerViewAlbum.setAdapter(albumsAdapter); 
    albumsAdapter.notifyDataSetChanged(); 
    return view; 
    } 
} 

AlbumsDetails.java

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.album_details); 

    albumsDetails_reyclerView = findViewById(R.id.albumsDetails_reyclerView); 

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext()); 
    albumsDetails_reyclerView.setLayoutManager(linearLayoutManager); 

    Bundle extras = getIntent().getExtras(); 
    if(extras != null){ 
    } 


    albumsDetailsAdapter = new AlbumsDetailsAdapter(getApplicationContext(), SongList2, new AlbumsDetailsAdapter.RecyclerItemClickListenerAlbumsDetails() { 
     @Override 
     public void onClickListener(SongInfoModel songInfoModelAlbumDetails, int positionAlbumDetails) { 
     } 
    }){ 


    }; 
    albumsDetails_reyclerView.setAdapter(albumsDetailsAdapter); 
    albumsDetailsAdapter.notifyDataSetChanged(); 
    } 
} 
+0

アダプター内部のビューホルダークラスをクリックします。それはアダプタからのクリックを取る適切な方法です –

答えて

0

、ViewHolderクラスからあなたが

View.setOnClickListenerを(CLLことができます)。あなたはアルバムIDを取得し、活動を開始する目的でそのアルバムIDを渡す必要がありrecyclerview

0

内部の特定の項目について

。そのアクティビティでは、そのアルバムIDを使用してカーソルを照会し、そのアルバムに関連する曲を取得します。その質問に答えることを願っています。以下は、allSongsViaAlbum IDを取得するために使用できるコードです。コード

Intent intent = new Intent(this, yourDesireActivity); 
    intent.putExtra("album_id", albumId); 
    startActivity(intent); 

また、新しい活動がgetAllSongsViaAlbumId()メソッドを呼び出して、あなたがIDを取得するために、コードの下に使用することができ、以前の活動から意図から取得したものを渡す開始し、以下のクリックイベントの使用に

public List<SongModel> getAllSongsViaAlbumId(long albumId) throws Exception { 
    List<SongModel> songList = null; 
    if (mIsPermissionGranted) { 
     ContentResolver contentResolver = mContext.getContentResolver(); 

     Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
     String selection = MediaStore.Audio.Media.ALBUM_ID + "=?"; 
     String [] whereArgs = {String.valueOf(albumId)}; 
     String sortOrder = MediaStore.Audio.Media.TITLE + " ASC"; 
     Cursor cursor = contentResolver.query(uri, null, selection, whereArgs, sortOrder); 

     if (cursor != null && cursor.moveToFirst()) { 
      songList = new ArrayList<>(); 
      int totalSongs = cursor.getCount(); 
      LogUtility.debugLog(MediaUtility.class.getSimpleName(), "Total number of audios " + totalSongs); 
      while (cursor.moveToNext()) { 
       SongModel currentSong = new SongModel(); 
       currentSong.setAlbum(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM))); 
       currentSong.setAlbumId(cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID))); 
       currentSong.setArtist(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST))); 
       currentSong.setData(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA))); 
       currentSong.setTitle(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE))); 
       currentSong.setAlbumArt(getAlbumArtViaAlbumId(currentSong.getAlbumId())); 

       songList.add(currentSong); 
      } 
      cursor.close(); 
     } 
    } 
    return songList; 
} 

あなたは

+0

そのためのコードを書いてもらえますか?あなたが気にしない場合 –

+0

@SebinPaul私はコードを追加しました –

+0

ありがとう!私はそれを見て、私が何か問題に直面するかどうか知っていることを知らせます! –

1

1)あなたはBを呼び出す必要があるのに役立ちます

long albumId = getIntent().getExtras().getLong("album_id") 

・ホープアダプターからアクティビティーへの応答。

  • これは、次のrecycler view.forに表示するモデルを渡すことができます。このモデルでは、単に次のrecyclerviewコンストラクタでモデルを渡します。

2)次のリサイクルビューアアダプターでは、そのモデルの値を単純に表示します。

注:コールバックを行う方法はわかっています。

0

まず、RecyclerViewアダプタの宣言方法を調べる必要があります。これは非常に良いチュートリアルです:https://antonioleiva.com/recyclerview/

さらに、リストの各要素に、Holder.itemView.setTag(HOLDER POSITION);を設定する必要があります。最後に、タグを取得できるクリックリスナを宣言することができます。

宛先クラスでは、id = getIntent()。getExtras()を呼び出してIDを取得できます。getInt( "ID");

関連する問題