Проблема с загрузкой следующего элемента после нажатия кнопки «Далее» в окне Recycler - PullRequest
0 голосов
/ 16 января 2020

У меня есть активность, известная как ArtistActivity, которая содержит RecylerView. В представлении Recycler ArtistActivity я загружаю список песен, как будто я загружаю URL-адрес песни и название песни из моей базы данных Firebase. Когда пользователь щелкает песню, он отправляет URL-адрес песни в другое действие, известное как SongPlayingActivity. Мой SongPlayingActivity, который берет URL-адрес и воспроизводит песню с помощью Media Player. Мой главный вопрос, у меня есть следующая кнопка в My SongPlayingActivity, и я хочу загрузить следующую песню, когда пользователь нажимает следующую кнопку. Как, если пользователь нажимает кнопку Next, он останавливает предыдущую песню и загружает следующую песню. из SongList. Очень похоже на то, как это работает в Spotify.

Надеюсь, вы понимаете мой вопрос и, пожалуйста, ответьте мне, если у вас есть какое-либо решение.

Вот мой код: -

ArtistActivity

public class ArtistActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private ValueEventListener eventListener;
    private DatabaseReference mDataRef, artist_ref;

    private List<PanelList> mList;
    private PanelAdapter panelAdapter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.artist1layout);

        mRecyclerView = findViewById(R.id.artist_song_recyclerview);
        mDataRef = FirebaseDatabase.getInstance().getReference("ArtistView").child(getIntent().getStringExtra("Artist"))
                .child("Songs");


        mRecyclerView.setHasFixedSize(true);

        mDataRef.keepSynced(true);

        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

        mList = new ArrayList<>();

        panelAdapter = new PanelAdapter(ArtistActivity.this, mList);

        mRecyclerView.setAdapter(panelAdapter);

        eventListener = mDataRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                mList.clear();
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                    PanelList list = postSnapshot.getValue(PanelList.class);
                    mList.add(list);


                }

                panelAdapter.notifyDataSetChanged();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
}

Класс адаптера: -

public class PanelAdapter extends RecyclerView.Adapter<PanelAdapter.PanelViewHolder> {


    private Context mContext;
    private List<PanelList> mUploads;


    public PanelAdapter(Context context, List<PanelList> panelList) {

        mContext = context;
        mUploads = panelList;

    }

    @NonNull
    @Override
    public PanelViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.artist_recycler_layout, parent, false);
        return new PanelViewHolder(v);

       // Toast.makeText(mContext, "" + ge, Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onBindViewHolder(@NonNull PanelViewHolder holder, int position) {

        PanelList panelList = mUploads.get(position);


        holder.textViewName.setText(panelList.getSongName());

        Glide.with(mContext)
                .load(panelList.getSongImageUri())
                .centerCrop()
                .into(holder.circleImageView);
        holder.thisLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String url = panelList.getSongUrl();

                Intent playSongActivity = new Intent(mContext, D.class);
                playSongActivity.putExtra("SongUrl", panelList.getSongUrl());


                mContext.startActivity(playSongActivity);
            }
        });

  }

    @Override
    public int getItemCount() {
        return mUploads.size();
    }

    public class PanelViewHolder extends RecyclerView.ViewHolder {

        private LinearLayout thisLayout;



        public PanelViewHolder(@NonNull View itemView) {
            super(itemView);

            thisLayout = itemView.findViewById(R.id.artist_linear);



        }

    }
}

Класс воспроизведения моей песни: -

public class D extends AppCompatActivity {

    public static SeekBar mSeekbar;
    public static ImageView Play_Icon_D;

    private Button next_button;
    //  private Button popup_button;

    private TextView Song_D, Artist_D;

    private Integer currentIndex;

    private List<PanelList> panelList;

    private Bundle bundle;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_song_playing);

        mSeekbar = findViewById(R.id.seekbar);

        Play_Icon_D = findViewById(R.id.play_icon_D_class);

        Song_D = findViewById(R.id.song_info_song_D);

        Artist_D = findViewById(R.id.song_info_artist_D);

        next_button = findViewById(R.id.D_next_button);

        bundle = getIntent().getExtras();

        panelList = bundle.getParcelableArrayList("SongUrls");

        currentIndex = bundle.getInt("currentPlayingIndex");


        playSong();


        next_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String newUrl = panelList.get(currentIndex).getSongName();
                currentIndex = currentIndex + 1;

//                Toast.makeText(D.this, newUrl, Toast.LENGTH_SHORT).show();

                FirebaseStorage storage = FirebaseStorage.getInstance();

                StorageReference reference = storage.getReferenceFromUrl(panelList.get(currentIndex).getSongUrl());

                reference.getDownloadUrl().addOnFailureListener(uri -> C.getInstance().play(uri.toString()));


            }
        });

    }

    private void playSong() {
        FirebaseStorage storage = FirebaseStorage.getInstance();
        StorageReference reference = storage.getReferenceFromUrl(panelList.get(currentIndex).getSongUrl());

        reference.getDownloadUrl().addOnFailureListener(uri -> C.getInstance().play(uri.toString()));

    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...