Как получить данные из Firebase после нажатия на ссылку переработчика, как потоковые приложения - PullRequest
0 голосов
/ 03 ноября 2019

Я пытался создать приложение для потоковой передачи музыки. Я создал Активность под названием Активность Показа. Я делаю горизонтальный RecyclerView в Display Activity. В моей Firebase я создал имя узла ArtistView, которое содержит список художников. После этого я загружаю изображение исполнителя и имя исполнителя в моем горизонтальном ресивере, как и в Spotify. В моей пожарной базе есть еще один узел, который содержит songList of Artist. Теперь мой главный вопрос заключается в том, как сделать так, чтобы пользователь нажимал на «Guri» исполнителя из My RecyclerView, а затем, щелкая по нему, загружал список его песен в New Activity из Firebase, как в Spotify, если мы щелкаем по любому исполнителю, тогда он загружает песни Artist в новомДеятельность. Вот изображение моей базы данных Firebsae: - Снимок экрана Firebase

Если вы не поняли мой вопрос, то вот код: -

Отображение: -

public class DisplayActivity extends AppCompatActivity {

    private ArtistRecyclerView artistRecyclerView;
    private DatabaseReference databaseReference;
    private ValueEventListener eventListener;
    private List<ArtistHoler> artistHolerList;
    private RecyclerView recyclerView;


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


        artistHolerList = new ArrayList<>();
        artistRecyclerView = new ArtistRecyclerView(this , artistHolerList);


        databaseReference = FirebaseDatabase.getInstance().getReference("ArtistView");
        databaseReference.keepSynced(true);

        recyclerView = findViewById(R.id.dispay_recycler_view);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this  , LinearLayoutManager.HORIZONTAL , false);

        recyclerView.setLayoutManager(linearLayoutManager);

        recyclerView.setAdapter(artistRecyclerView);

        eventListener = databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                    ArtistHoler artistHoler = snapshot.getValue(ArtistHoler.class);
                    artistHolerList.add(artistHoler);

                }

                artistRecyclerView.notifyDataSetChanged();
            }

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

            }
        });

    }





}

Адаптер исполнителя: -

public class ArtistRecyclerView extends RecyclerView.Adapter<ArtistRecyclerView.HolderOfArtist> {
    private List<ArtistHoler> mHolder;
    private Context mContext;

    public ArtistRecyclerView(Context context, List<ArtistHoler> holder) {
        mHolder = holder;
        mContext = context;
    }

    @NonNull
    @Override
    public HolderOfArtist onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.resource, parent, false);
        return new HolderOfArtist(view);
    }

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

        ArtistHoler artistHoler = mHolder.get(position);


        String text1 = artistHoler.getName();





        Glide.with(mContext)
                .asBitmap()
                .centerCrop()
                .load(artistHoler.getImageUri())
                .into(holder.image);

        holder.image.setOnClickListener(view -> Toast.makeText(mContext, text1, Toast.LENGTH_SHORT).show());

        holder.name.setText(text1);

    }

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


    public class HolderOfArtist extends RecyclerView.ViewHolder {
        ImageView image;
        TextView name;

        public HolderOfArtist(View itemView) {
            super(itemView);

            image = itemView.findViewById(R.id.resource_image);
            name = itemView.findViewById(R.id.resource_text);

        }
    }

}

Держатели исполнителя: -

public class ArtistHoler {

    private String mName;
    private String mImageUri;

   public ArtistHoler() {
   }

   public ArtistHoler(String name , String imageUri){
       mName = name;
       mImageUri = imageUri;
   }

   public String getName() {
       return mName;
   }

   public void setName(String name){
       mName = name;
   }

   public String getImageUri(){
       return mImageUri;
   }

   public void setImageUri(String imageUri) {
       mImageUri = imageUri;
   }
}

1 Ответ

0 голосов
/ 03 ноября 2019

Добавьте click событие на предмет держателя и возьмите соответствующее имя исполнителя и передайте его следующему действию.

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

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String artistName = mHolder.get(position).getName();
            Intent detailIntent = new Intent(mContext, SongsActivity.class);
            detailIntent.putExtra("ArtistName", artistName);
            startActivity(detailIntent);
        }
    });
}

Затем в следующем занятии onCreate получите имя исполнителя, как показано ниже, и вызовите пожарную базучтобы получить список песен этого конкретного исполнителя и делать что угодно внутри onDataChange

String artistName = getIntent().getStringExtra("ArtistName");

FirebaseDatabase.getInstance().getReference("ArtistSongs").orderByKey().equalTo(artistName).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for(DataSnapshot song: dataSnapshot.child(artistName).getChildren()) {
             //here song indicates "Song" with SongName and SongUrl
        }
    }

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

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