在recyclerView中单击下一步按钮后加载下一个项目

问题描述 投票:0回答:3

我有一个名为ArtistActivity的活动,其中包含一个RecyclerView,该加载器从Firebase加载歌曲数据并在Artist Activity中显示。我的ArtistActivity RecyclerView有一个适配器类和一个View Holder类。当我单击RecyclerView中的项目时,它将songUrlsongNamesongArtist发送到另一个名为SongPlayingActivity的活动,该活动需要songUrl并播放歌曲。

我的主要问题是我的SongPlayingActivity中有一个下一个按钮,我想在用户单击下一个按钮后加载下一个项目。就像用户单击“下一步”按钮一样,它将停止上一首播放的歌曲并从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) {

            }
        });
    }
}

ViewHolder / Adapter类:

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



        }

    }
}
java android firebase firebase-realtime-database recycler-adapter
3个回答
1
投票

代替发送单首歌曲,您可以发送可打包的arrayList,然后单击下一步按钮传递下一首歌曲数据。


0
投票

在您的onclick上将列表中的所有URL传递给Song Activity类:

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

            Intent playSongActivity = new Intent(mContext, D.class);
            Bundle bundle = new Bundle();
            bundle.putParcelable("SongUrls", mUploads);
            bundle.putInt("currentPlayingIndex", position)
            playSongActivity.putExtras(bundle);

            mContext.startActivity(playSongActivity);
        }
    });

然后在您的SongActivity类上接收它们,如:

Bundle bundle = getIntent().getExtras();
List<PanelList> panelList = bundle.getParcelable("SongUrls");
Integer currentIndex = bundle.getInt("currentPlayingIndex");

单击下一步按钮的侦听器

 String newUrl = panelList[currentindex].getSongUrl();
 currentIndex = currentIndex + 1;

不要忘记检查您是否正在播放最后一个数组对象,否则您的应用程序会在将当前播放索引加1时崩溃。


-1
投票

您可以使用Google https://developer.android.com/topic/libraries/architecture/paging中的PagedListAdapter

© www.soinside.com 2019 - 2024. All rights reserved.