私は音楽アプリケーションを構築しています。私は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();
}
}
アダプター内部のビューホルダークラスをクリックします。それはアダプタからのクリックを取る適切な方法です –