I build app with images of animals, and after you click on animal, its play sound for that animal.
I use Recyclerview for displaying all animals items.
My problem is that i do not know how to handle click event for playing sounds for each animal. I do know how to play same sound for each item in recyclerview but i do not know how to handle specific sound for each item.
this is code for my class where i handle data, where i put all animal names, images and sounds for each object.
package com.example.android.animalsoundsforchildren;
import java.util.ArrayList;
public class Zivotinje {
private String mAnimal_name;
private int mAnimal_slika;
private int mSound;
public Zivotinje(String animalName, int slika, int sound) {
this.setmAnimal_name(animalName);
this.setmAnimal_slika(slika);
this.setmSound(sound);
}
public String getmAnimal_name() {
return mAnimal_name;
}
public void setmAnimal_name(String mAnimal_name) {
this.mAnimal_name = mAnimal_name;
}
public int getmAnimal_slika() {
return mAnimal_slika;
}
public void setmAnimal_slika(int mAnimal_slika) {
this.mAnimal_slika = mAnimal_slika;
}
public int getmSound() {
return mSound;
}
public void setmSound(int mSound) {
this.mSound = mSound;
}
//putting data
public static ArrayList<Zivotinje> createZivotinjeList() {
ArrayList<Zivotinje> animals = new ArrayList<Zivotinje>();
animals.add(new Zivotinje("Sheep", R.drawable.domestic_sheep, R.raw.gun));
animals.add(new Zivotinje("Sparrow", R.drawable.birds_sparrow, R.raw.birds_sparrow));
animals.add(new Zivotinje("Dolphin", R.drawable.sea_dolphin, R.raw.dolphin));
animals.add(new Zivotinje("Bumblebee", R.drawable.insects_bumblebee, R.raw.bumblebee));
animals.add(new Zivotinje("Tractor", R.drawable.cars_tractor, R.raw.tractor));
animals.add(new Zivotinje("Baby Cry", R.drawable.laugh_baby_cry, R.raw.baby_cray));
animals.add(new Zivotinje("Wind", R.drawable.nature_wind, R.raw.wind));
animals.add(new Zivotinje("Golf", R.drawable.effects_golf, R.raw.golf));
animals.add(new Zivotinje("Clock", R.drawable.others_clock, R.raw.clock));
return animals;
}
}
This is code for Adapter, and here i handle click and when i click on item, it play the same sound but how to play different sound for each animal, not the same sound like here. Here i always play sound R.raw.clock
package com.example.android.animalsoundsforchildren;
import android.content.Context;
import android.media.MediaPlayer;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class ZivotinjeAdapter extends RecyclerView.Adapter<ZivotinjeAdapter.ViewHolder> {
@Override
public ZivotinjeAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
// Inflate the custom layout
View contactView = inflater.inflate(R.layout.item_zivotinje, parent, false);
// Return a new holder instance
ViewHolder viewHolder = new ViewHolder(contactView);
return viewHolder;
}
@Override
public void onBindViewHolder(ZivotinjeAdapter.ViewHolder viewHolder, int position) {
Zivotinje zivotinjeIme = mZivotinje.get(position);
// Set item views based on the data model
TextView textView = viewHolder.nameTextView;
textView.setText(zivotinjeIme.getmAnimal_name());
ImageView slika_source = viewHolder.imageView;
slika_source.setImageResource(zivotinjeIme.getmAnimal_slika());
}
@Override
public int getItemCount() {
return mZivotinje.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView imageView;
public TextView nameTextView;
public ViewHolder(final View itemView) {
super(itemView);
nameTextView = (TextView) itemView.findViewById(R.id.zivotinjaIme_id);
imageView = (ImageView) itemView.findViewById(R.id.slika_id);
//It works when i play for each item sound but how to play specific sound for each animal
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MediaPlayer mediaPlayer = MediaPlayer.create(v.getContext(), R.raw.clock);
mediaPlayer.start();
}
});
}
}
private List<Zivotinje> mZivotinje;
public ZivotinjeAdapter(List<Zivotinje> animals) {
mZivotinje = animals;
}
}
Advertisement
Answer
Refer the link https://gist.github.com/grantland/cd70814fe4ac369e3e92
you can refer to the item click event and how to get the item on click event
please refer the code below. i have made the changes
public class ZivotinjeAdapter extends RecyclerView.Adapter<ZivotinjeAdapter.ViewHolder> {
@Override
public ZivotinjeAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
// Inflate the custom layout
View contactView = inflater.inflate(R.layout.item_zivotinje, parent, false);
// Return a new holder instance
ViewHolder viewHolder = new ViewHolder(contactView);
return viewHolder;
}
@Override
public void onBindViewHolder(ZivotinjeAdapter.ViewHolder viewHolder, int position) {
Zivotinje zivotinjeIme = mZivotinje.get(position);
// Set item views based on the data model
TextView textView = viewHolder.nameTextView;
textView.setText(zivotinjeIme.getmAnimal_name());
ImageView slika_source = viewHolder.imageView;
slika_source.setImageResource(zivotinjeIme.getmAnimal_slika());
viewHolder.setItem(mZivotinje[position]);
}
@Override
public int getItemCount() {
return mZivotinje.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView imageView;
public TextView nameTextView;
private Zivotinje mItem;
public ViewHolder(final View itemView) {
super(itemView);
nameTextView = (TextView) itemView.findViewById(R.id.zivotinjaIme_id);
imageView = (ImageView) itemView.findViewById(R.id.slika_id);
public void setItem(Zivotinje item) {
mItem = item;
}
//It works when i play for each item sound but how to play specific sound for each animal
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// here you will get mItem and from that you can get the sound
MediaPlayer mediaPlayer = MediaPlayer.create(v.getContext(), R.raw.clock);
mediaPlayer.start();
}
});
}
}
private List<Zivotinje> mZivotinje;
public ZivotinjeAdapter(List<Zivotinje> animals) {
mZivotinje = animals;
}
}