-1

Je construis une application musicale et j'ai un fragment "Album" qui affiche la couverture de l'album de la chanson dans RecyclerView. Ce que je veux, c'est quand je clique sur l'un de ces éléments (couverture de l'album), je devrais être amené à une autre activité (albumsDetails.java) qui contient les chansons de cet album particulier. Et toutes ces chansons devraient être affichées dans RecyclerView. Je sais comment utiliser les intentions et j'ai essayé beaucoup de choses mais aucune ne fonctionne.Comment cliquer sur un élément de recyclerView et aller à un autre recycleurView qui contient les détails de l'élément cliqué?

S'IL VOUS PLAÎT ne pas baisser ma question car je suis très nouveau à ANDROID STUDIO.

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

Cliquez à l'intérieur de la classe de support de vue à l'intérieur de l'adaptateur. C'est la bonne façon de prendre le clic d'un adaptateur. –

Répondre

0

intérieur recycleur Voir Adaptateur, de la classe ViewHolder votre peut CLL

View.setOnClickListener();

pour cet élément particulier à l'intérieur recyclerview

0

Vous devez obtenir l'identifiant de l'album et passer cet identifiant album avec l'intention de commencer l'activité. Et sur cette activité, utilisez cet identifiant d'album et interrogez le curseur pour obtenir les chansons liées à cet album. J'espère que répondre à la question. Voici le code que vous pouvez utiliser pour obtenir l'identifiant allSongsViaAlbum.

méthode
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; 
} 

Lors de l'utilisation d'événements, cliquez ci-dessous le code

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

Et quand nouvel appel commence l'activité getAllSongsViaAlbumId() et passer ce que vous obtenez de l'intention de l'activité précédente, vous pouvez utiliser ci-dessous code pour obtenir l'ID

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

espoir qui vous aide à

+0

Pouvez-vous s'il vous plaît écrire un morceau de code pour cela? si cela ne vous dérange pas –

+0

@SebinPaul J'ai ajouté le code –

+0

Merci! Je vais y jeter un coup d'œil et faire savoir si je suis confronté à des problèmes! –

1

1), vous devez appeler b Ack de l'adaptateur à l'activité. Dans lequel vous pouvez passer le modèle que vous souhaitez afficher dans la vue recycleur suivante. Pour cela, il suffit de passer le modèle à travers le constructeur recyclerview suivant. 2) dans l'adaptateur de vue recycleur suivant vous avez un modèle, affichez simplement les valeurs de ce modèle.

note: -en supposant que vous savez comment donner un rappel.

0

Premièrement, vous devez voir comment déclarer un adaptateur RecyclerView. Ceci est un très bon tutoriel: https://antonioleiva.com/recyclerview/

De plus, vous devez définir un tag pour chaque élément de votre liste, Holder.itemView.setTag (HOLDER POSITION); et enfin vous pouvez déclarer un écouteur de clic où vous pouvez récupérer la balise.

public void onClick(View v) { 

       int tempid = (int) v.getTag(); 

       Intent intent = new Intent(getContext(), destination.class); 

       intent.putExtra("ID", (int) v.getTag()); 

       startActivity(intent); 

Sur la classe de destination, vous pouvez récupérer l'id en appelant id = getIntent(). GetExtras().getInt ("ID");