在两个RecyclerViews之间传递数据

时间:2017-10-20 16:24:44

标签: android android-intent android-recyclerview android-music-player

我正在构建一个具有标签布局的音乐播放器。其中一个标签是" Genres"(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;
}

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);
}

GenresSong.java(点击类型时应该显示歌曲的类):

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();

}

GenresSongAdapter.java(GenresSong.java的适配器类):

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);
    }


}

0 个答案:

没有答案