我正在創建一個音樂應用程序,我有一個「專輯」片段,它在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();
}
}
在適配器內部的視圖持有者類內部單擊。這是從適配器獲取點擊的正確方法 –