Android 在两个RecyclerViews之间传递数据

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),该活动会显示属于该点击类型的所有歌曲 我的问题是: 当我点击任何类型的歌曲时,它会带我进入另一个活动,但它会显示上次添加到数组中的歌曲。无论我点击

我正在构建一个具有选项卡布局的音乐播放器。其中一个选项卡是“流派”(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