如何点击recyclerView项目并转到另一个包含点击项目详细信息的recyclerView?
我正在创建一个音乐应用程序,我有一个“专辑”片段,它在RecyclerView
中显示歌曲的专辑封面。我想要的是,当我点击任何这些项目(专辑封面)时,我应该转到另一个包含该特定专辑歌曲的活动(albumsDetails.java)。所有这些歌曲应显示在RecyclerView
。 我知道如何使用意图,我已经尝试了很多东西,但都没有工作。如何点击recyclerView项目并转到另一个包含点击项目详细信息的recyclerView?
请不要低估我的问题,因为我对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();
}
}
内部回收站查看适配器,从ViewHolder类你可以CLL
View.setOnClickListener();
的内部recyclerview
你需要得到相册ID,并通过该专辑ID意图开始的活动,特定项目。在该活动中,使用该专辑ID并查询光标以获取与该专辑相关的歌曲。希望回答这个问题。以下是您可以用来获取allSongsViaAlbum 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;
}
On Click事件使用下面的代码
Intent intent = new Intent(this, yourDesireActivity);
intent.putExtra("album_id", albumId);
startActivity(intent);
而当新的活动开始调用getAllSongsViaAlbumId()方法,并传递你从以前的活动意图让你可以使用下面的代码来获取ID
long albumId = getIntent().getExtras().getLong("album_id")
希望帮助你
您可以为此写一段代码吗?如果您不介意 –
@SebinPaul我已添加代码 –
谢谢!我会研究它,让我知道如果我遇到任何问题! –
1)你需要b键从适配器到活动。
- 其中您可以传递要在下一个回收视图中显示的模型,只需将该模型通过下一个回收视图构造函数即可。
2)在下一个回收站视图适配器中,您有模型只显示该模型的值。
注意: - 假设你知道如何给回电话。
首先,您需要了解如何声明RecyclerView适配器。这是一个非常好的教程:https://antonioleiva.com/recyclerview/
此外,您需要设置标签到列表中的每个元素,Holder.itemView.setTag(HOLDER POSITION);最后,您可以声明一个点击侦听器,您可以在其中检索标记。
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);
在目标类上,可以通过调用id = getIntent()。getExtras()来检索id。getInt( “ID”);
Passing RecyclerView CardView Clicked Item Data To Activity
Handle Button click inside a row in RecyclerView
尝试。在适配器类中使用onClickListener。
在适配器内部的视图持有者类内部单击。这是从适配器获取点击的正确方法 –