Android 在两个RecyclerViews之间传递数据
我正在构建一个具有选项卡布局的音乐播放器。其中一个选项卡是“流派”(Genre.java),它在RecyclerView中显示歌曲的流派(通过查询android手机外部存储器中的歌曲)。我也为RecyclerView中的类型设置了onClickListeners。因此,当我点击其中一种类型时,它会带我进入另一个活动(GenresSongs.java),该活动会显示属于该点击类型的所有歌曲 我的问题是:Android 在两个RecyclerViews之间传递数据,android,android-intent,android-recyclerview,android-music-player,Android,Android Intent,Android Recyclerview,Android Music Player,我正在构建一个具有选项卡布局的音乐播放器。其中一个选项卡是“流派”(Genre.java),它在RecyclerView中显示歌曲的流派(通过查询android手机外部存储器中的歌曲)。我也为RecyclerView中的类型设置了onClickListeners。因此,当我点击其中一种类型时,它会带我进入另一个活动(GenresSongs.java),该活动会显示属于该点击类型的所有歌曲 我的问题是: 当我点击任何类型的歌曲时,它会带我进入另一个活动,但它会显示上次添加到数组中的歌曲。无论我点击
当我点击任何类型的歌曲时,它会带我进入另一个活动,但它会显示上次添加到数组中的歌曲。无论我点击哪种类型,它都会带我去看同一首歌 我想要的是: 当我点击列表中的一种类型时,它会带我去点击类型的歌曲。我希望你明白我的意思。我要通过GenreID的考试 Genre.java(显示所有歌曲流派的类):
public class Genres extends Fragment {
private static final String TAG = "Genres";
RecyclerView recyclerView_genre;
GenresAdapter genresAdapter;
ArrayList<GenresModel> Genrelist = new ArrayList<>();
Cursor genrecursor;
long id;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.genres_activity, container, false);
recyclerView_genre = view.findViewById(R.id.recyclerView_genre);
LinearLayoutManager genreLayout = new LinearLayoutManager(getContext());
recyclerView_genre.setLayoutManager(genreLayout);
final Uri uri = MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI;
genrecursor = getActivity().getContentResolver().query(uri,null,null, null, null);
if (genrecursor != null) {
if (genrecursor.moveToFirst()) {
do {
id = genrecursor.getLong(genrecursor.getColumnIndex(MediaStore.Audio.Genres._ID));
String name = genrecursor.getString(genrecursor.getColumnIndex(MediaStore.Audio.Genres.NAME));
GenresModel genresModel = new GenresModel(id,name);
Genrelist.add(genresModel);
Collections.sort(Genrelist, new Comparator<GenresModel>() {
@Override
public int compare(GenresModel lhs, GenresModel rhs) {
return lhs.getGenreName().compareTo(rhs.getGenreName());
}
});
} while (genrecursor.moveToNext());
}
genrecursor.close();
}
genresAdapter = new GenresAdapter(getContext(), Genrelist, new GenresAdapter.GenreItemClickListener() {
@Override
public void onClickListener(GenresModel genresModel, int GenrePosition) {
Intent nIntent = new Intent(getContext(), GenresSong.class);
nIntent.putExtra("genre_ID", id);
startActivity(nIntent);
}
});
recyclerView_genre.setAdapter(genresAdapter);
genresAdapter.notifyDataSetChanged();
return view;
}
公共类类型扩展了片段{
私有静态最终字符串TAG=“Genres”;
RecyclerView RecyclerView_流派;
GenresAdapter GenresAdapter;
ArrayList Genrelist=新的ArrayList();
游标递归器;
长id;
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.genres\u活动,容器,false);
recyclerView_流派=view.findViewById(R.id.recyclerView_流派);
LinearLayoutManager genreLayout=新的LinearLayoutManager(getContext());
recyclerView_流派。setLayoutManager(genreLayout);
最终Uri=MediaStore.Audio.Genres.EXTERNAL\u CONTENT\u Uri;
genrecursor=getActivity().getContentResolver().query(uri,null,null,null,null);
if(genrecursor!=null){
if(genrecursor.moveToFirst()){
做{
id=genrecursor.getLong(genrecursor.getColumnIndex(MediaStore.Audio.Genres._id));
String name=genrecursor.getString(genrecursor.getColumnIndex(MediaStore.Audio.Genres.name));
GenresModel GenresModel=新的GenresModel(id,名称);
Genrelist.add(genresModel);
Collections.sort(Genrelist,newcomparator(){
@凌驾
公共整数比较(GenresModel lhs、GenresModel rhs){
返回lhs.getGenreName().compareTo(rhs.getGenreName());
}
});
}while(genrecursor.moveToNext());
}
genrecursor.close();
}
genresAdapter=new genresAdapter(getContext(),Genrelist,new genresAdapter.GenreItemClickListener()){
@凌驾
public void onClickListener(GenresModel GenresModel,int genresposition){
Intent nIntent=newintent(getContext(),GenresSong.class);
第九部分:putExtra(“类型ID”,ID);
星触觉(90度);
}
});
recyclerView_genre.setAdapter(genresAdapter);
genresAdapter.notifyDataSetChanged();
返回视图;
}
GenresAdapter.java(Genres.java的适配器类):
public class GenresAdapter extends RecyclerView.Adapter<GenresAdapter.GenresHolder> {
private Context gContext;
private ArrayList<GenresModel> GenreList = new ArrayList<>();
private GenreItemClickListener listenerGenre;
public GenresAdapter(Context gContext, ArrayList<GenresModel> genreList, GenresAdapter.GenreItemClickListener listenerGenre) {
this.gContext = gContext;
GenreList = genreList;
this.listenerGenre = listenerGenre;
}
@Override
public GenresAdapter.GenresHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view3 = LayoutInflater.from(gContext).inflate(R.layout.row_genre, parent, false);
return new GenresHolder(view3);
}
@Override
public void onBindViewHolder(GenresAdapter.GenresHolder holder, int position) {
final GenresModel genresModel1 = GenreList.get(position);
holder.genreText.setText( genresModel1.getGenreName());
holder.bindSong(genresModel1, listenerGenre);
}
@Override
public int getItemCount() {
return GenreList.size();
}
public class GenresHolder extends RecyclerView.ViewHolder {
TextView genreText;
public GenresHolder(View itemView) {
super(itemView);
genreText = itemView.findViewById(R.id.genreText);
}
public void bindSong(final GenresModel genresModel1, final GenreItemClickListener listenerGenre) {
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listenerGenre.onClickListener(genresModel1, getLayoutPosition());
}
});
}
}
public interface GenreItemClickListener{
void onClickListener(GenresModel genresModel, int GenrePosition);
}
public class GenresSong extends Activity {
RecyclerView recyclerView_genreSong;
ArrayList <GenreSongModel> GenreSongList = new ArrayList<>();
GenresSongAdapter genresSongAdapter;
long genreID;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.genres_details);
recyclerView_genreSong = findViewById(R.id.recyclerView_genreSong);
LinearLayoutManager l1 = new LinearLayoutManager(getApplicationContext());
recyclerView_genreSong.setLayoutManager(l1);
genreID = getIntent().getExtras().getLong("genre_ID");
Uri uri = MediaStore.Audio.Genres.Members.getContentUri("external", genreID);
String[] projection ={MediaStore.Audio.Media.TITLE};
Cursor cursor = getApplicationContext().getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
GenreSongModel s = new GenreSongModel(name);
GenreSongList.add(s);
} while (cursor.moveToNext());
}
cursor.close();
Collections.sort(GenreSongList, new Comparator<GenreSongModel>() {
@Override
public int compare(GenreSongModel lhs, GenreSongModel rhs) {
return lhs.getSongName().compareTo(rhs.getSongName());
}
});
}
genresSongAdapter = new GenresSongAdapter(getApplicationContext(), GenreSongList);
recyclerView_genreSong.setAdapter(genresSongAdapter);
genresSongAdapter.notifyDataSetChanged();
}
public class GenresSongAdapter extends RecyclerView.Adapter<GenresSongAdapter.GenresSongHolder> {
Context gsContext;
ArrayList<GenreSongModel> GenresSongList2 = new ArrayList<>();
public GenresSongAdapter(Context gsContext, ArrayList<GenreSongModel> genresSongList2) {
this.gsContext = gsContext;
GenresSongList2 = genresSongList2;
}
@Override
public GenresSongAdapter.GenresSongHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v5 = LayoutInflater.from(gsContext).inflate(R.layout.row_genredetails, parent, false);
return new GenresSongHolder(v5);
}
@Override
public void onBindViewHolder(GenresSongAdapter.GenresSongHolder holder, int position) {
GenreSongModel genreSongModel = GenresSongList2.get(position);
holder.genreSongName.setText(genreSongModel.getSongName());
}
@Override
public int getItemCount() {
return GenresSongList2.size();
}
public class GenresSongHolder extends RecyclerView.ViewHolder {
TextView genreSongName;
public GenresSongHolder(View itemView) {
super(itemView);
genreSongName = itemView.findViewById(R.id.genreSongName);
}
}
公共类GenresAdapter扩展了RecyclerView.Adapter{
私人语境;
private ArrayList GenreList=new ArrayList();
私有GenreItemClickListener Listener类型;
public GenresAdapter(Context gContext、ArrayList genreList、GenresAdapter.GenreItemClickListener listener-genre){
this.gContext=gContext;
GenreList=GenreList;
this.listenergree=listenergree;
}
@凌驾
public GenresAdapter.GenresHolder onCreateViewHolder(视图组父级,int-viewType){
查看视图3=布局更平坦。从(gContext)。充气(R.layout.row\u类型,父,假);
返回新的GenresHolder(视图3);
}
@凌驾
BindViewHolder上的公共无效(GenresAdapter.GenresHolder,int位置){
final GenresModel genresModel1=GenreList.get(位置);
holder.genreText.setText(genresModel1.getGenreName());
bindSong(genresModel1,ListenerGene);
}
@凌驾
public int getItemCount(){
返回GenreList.size();
}
公共类GenresHolder扩展了RecyclerView.ViewHolder{
文本视图genreText;
公共GenresHolder(查看项目视图){
超级(项目视图);
genreText=itemView.findviewbyd(R.id.genreText);
}
public void bindSong(最终版本GenresModel genresModel1,最终版本GenreItemClickListener Listener流派){
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
onClickListener(genresModel1,getLayoutPosition());
}
});
}
}
公共接口GenreItemClickListener{
void onClickListener(GenresModel GenresModel,int genresposition);
}
GenresSong.java(点击流派时应该显示歌曲的类):
public class GenresAdapter extends RecyclerView.Adapter<GenresAdapter.GenresHolder> {
private Context gContext;
private ArrayList<GenresModel> GenreList = new ArrayList<>();
private GenreItemClickListener listenerGenre;
public GenresAdapter(Context gContext, ArrayList<GenresModel> genreList, GenresAdapter.GenreItemClickListener listenerGenre) {
this.gContext = gContext;
GenreList = genreList;
this.listenerGenre = listenerGenre;
}
@Override
public GenresAdapter.GenresHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view3 = LayoutInflater.from(gContext).inflate(R.layout.row_genre, parent, false);
return new GenresHolder(view3);
}
@Override
public void onBindViewHolder(GenresAdapter.GenresHolder holder, int position) {
final GenresModel genresModel1 = GenreList.get(position);
holder.genreText.setText( genresModel1.getGenreName());
holder.bindSong(genresModel1, listenerGenre);
}
@Override
public int getItemCount() {
return GenreList.size();
}
public class GenresHolder extends RecyclerView.ViewHolder {
TextView genreText;
public GenresHolder(View itemView) {
super(itemView);
genreText = itemView.findViewById(R.id.genreText);
}
public void bindSong(final GenresModel genresModel1, final GenreItemClickListener listenerGenre) {
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listenerGenre.onClickListener(genresModel1, getLayoutPosition());
}
});
}
}
public interface GenreItemClickListener{
void onClickListener(GenresModel genresModel, int GenrePosition);
}
public class GenresSong extends Activity {
RecyclerView recyclerView_genreSong;
ArrayList <GenreSongModel> GenreSongList = new ArrayList<>();
GenresSongAdapter genresSongAdapter;
long genreID;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.genres_details);
recyclerView_genreSong = findViewById(R.id.recyclerView_genreSong);
LinearLayoutManager l1 = new LinearLayoutManager(getApplicationContext());
recyclerView_genreSong.setLayoutManager(l1);
genreID = getIntent().getExtras().getLong("genre_ID");
Uri uri = MediaStore.Audio.Genres.Members.getContentUri("external", genreID);
String[] projection ={MediaStore.Audio.Media.TITLE};
Cursor cursor = getApplicationContext().getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
GenreSongModel s = new GenreSongModel(name);
GenreSongList.add(s);
} while (cursor.moveToNext());
}
cursor.close();
Collections.sort(GenreSongList, new Comparator<GenreSongModel>() {
@Override
public int compare(GenreSongModel lhs, GenreSongModel rhs) {
return lhs.getSongName().compareTo(rhs.getSongName());
}
});
}
genresSongAdapter = new GenresSongAdapter(getApplicationContext(), GenreSongList);
recyclerView_genreSong.setAdapter(genresSongAdapter);
genresSongAdapter.notifyDataSetChanged();
}
public class GenresSongAdapter extends RecyclerView.Adapter<GenresSongAdapter.GenresSongHolder> {
Context gsContext;
ArrayList<GenreSongModel> GenresSongList2 = new ArrayList<>();
public GenresSongAdapter(Context gsContext, ArrayList<GenreSongModel> genresSongList2) {
this.gsContext = gsContext;
GenresSongList2 = genresSongList2;
}
@Override
public GenresSongAdapter.GenresSongHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v5 = LayoutInflater.from(gsContext).inflate(R.layout.row_genredetails, parent, false);
return new GenresSongHolder(v5);
}
@Override
public void onBindViewHolder(GenresSongAdapter.GenresSongHolder holder, int position) {
GenreSongModel genreSongModel = GenresSongList2.get(position);
holder.genreSongName.setText(genreSongModel.getSongName());
}
@Override
public int getItemCount() {
return GenresSongList2.size();
}
public class GenresSongHolder extends RecyclerView.ViewHolder {
TextView genreSongName;
public GenresSongHolder(View itemView) {
super(itemView);
genreSongName = itemView.findViewById(R.id.genreSongName);
}
}
public class GenresSong扩展活动{
RecyclerView RecyclerView_genreSong;
ArrayList GenreSongList=新的ArrayList();
GenresSongAdapter GenresSongAdapter;
长根里德;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.Tyres\u详细信息);
recyclerView\u genreSong=findViewById(R.id.recyclerView\u genreSong);
LinearLayoutManager l1=新的LinearLayoutManager(getApplicationContext());
设置布局管理器(l1);
genreID=getIntent().getExtras().getLong(“流派ID”);
Uri=MediaStore.Audio.Genres.Members.getContentUri(“外部”,genreID);
字符串[]投影={MediaStore.Audio.Media.TITLE};
Cursor Cursor=getApplicationContext().getContentResolver().query(uri、投影、null、null);
如果(光标!=null){
if(cursor.moveToFirst()){
做{
字符串名称=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
GenreSongModel s=新的GenreSongMod