2016-12-19 1 views
1

Je suis nouveau à android et je veux jouer et mettre en pause la chanson quand ImageView a cliqué.Selon mon projet j'ai un listview personnalisé et dans cette listview j'ai deux ImageView .So, lorsque l'utilisateur sélectionnez jouer à ce moment jouer la chanson et sélectionnez pause à ce moment-là mettre en pause la chanson.Comment définir ImageView setOnClickListner qui est dans la liste personnalisée et lire/mettre en pause la chanson lorsque Imageview cliqué?

Note: - Fondamentalement, je veux définir cette onClickListner dans ma classe d'activité pas listview personnalisée adapter.And j'ajoute que les chansons de res\raw dossier à Arraylist.

Voici ce mon adaptateur

public class SongAdapter extends BaseAdapter{ 

Context context; 
private ArrayList<SongModel> songsListDat = null; 
public ArrayList<SongModel> songsList; 
private static LayoutInflater inflater; 

public SongAdapter(Activity activity, ArrayList<SongModel> songsListDat) { 

    this.context = activity; 
    this.songsListDat = songsListDat; 
    this.songsList = new ArrayList<SongModel>(); 
    this.songsList.addAll(songsListDat); 
} 
public void setSelectedIndex(int ind) 
{ 
    notifyDataSetChanged(); 
} 

@Override 
public int getViewTypeCount() { 

    return 1; 
} 

@Override 
public int getCount() { 
    return songsListDat.size(); 
} 

@Override 
public Object getItem(int position) { 
    return songsListDat.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 

    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View vi = convertView; 
    if (convertView == null) 
     vi = inflater.inflate(R.layout.ringtone_row_layout, null); 

    TextView title = (TextView) vi.findViewById(R.id.name); // title 
    ImageView play = (ImageView)vi.findViewById(R.id.imgPlayPause); 
    ImageView pause = (ImageView)vi.findViewById(R.id.imgPause); 


    SongModel song = new SongModel(); 
    song = songsListDat.get(position); 
    title.setText(song.getSongTitle()); 

    return vi; 
} 
} 

Ceci est la classe d'activité: - Dans cette activité, je veux mettre onclicklistner pour jouer et faire une pause fonctionnalité.

public class MainActivity extends ListActivity { 

public static final String TAG = "[MainActivity]"; 

Activity activity; 
SongAdapter songAdapter; 
SongsManager songsManager = new SongsManager(); 
MediaPlayer mp; 

// Songs list 
public ArrayList<SongModel> songsList = new ArrayList<>(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    activity = MainActivity.this; 


    mp = new MediaPlayer(); 


    SongsManager plm = new SongsManager(activity); 
    final ArrayList<SongModel> songsListData = songsManager.songList; 


    this.songsList = plm.getAllSongs(); 


    for (int i = 0; i < songsListData.size(); i++) { 
     SongModel song = songsListData.get(i); 
     songsListData.add(song); 
    } 


    songAdapter = new SongAdapter(this, songsList); 
    setListAdapter(songAdapter); 

    ListView lv = getListView(); 
} 
} 

ce qui est mon modèle chanson classe

public class SongModel { 

private String songPath, songTitle; 

public SongModel(String songPath, String songTitle) { 
    this.songPath = songPath; 
    this.songTitle = songTitle; 
} 

public SongModel() { 

} 

public void setSongPath(String songPath){ 
    this.songPath = songPath; 
} 

public String getSongPath() { 

    return songPath; 
} 
public void setSongTitle(String songTitle){ 
    this.songTitle = songTitle; 
} 

public String getSongTitle() { 

    return songTitle; 
} 

} 

Si quelqu'un sait alors s'il vous plaît aidez-moi ...

Répondre

2

First Ajouter une interface dans votre classe d'adaptateur comme & l'utiliser comme ceci ::

public class SongAdapter extends BaseAdapter { 

    Context context; 
    private ArrayList<SongModel> songsListDat = null; 
    public ArrayList<SongModel> songsList; 
    public OnMusicListener mListener; 
    private static LayoutInflater inflater; 

    public SongAdapter(Activity activity, ArrayList<SongModel> songsListDat, OnMusicListener mListener) { 

     this.context = activity; 
     this.mListener = mListener; 
     this.songsListDat = songsListDat; 
     this.songsList = new ArrayList<SongModel>(); 
     this.songsList.addAll(songsListDat); 
    } 

    public void setSelectedIndex(int ind) { 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getViewTypeCount() { 

     return 1; 
    } 

    @Override 
    public int getCount() { 
     return songsListDat.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return songsListDat.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public int getItemViewType(int position) { 

     return position; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View vi = convertView; 
     if (convertView == null) 
      vi = inflater.inflate(R.layout.ringtone_row_layout, null); 

     TextView title = (TextView) vi.findViewById(R.id.name); // title 
     ImageView play = (ImageView) vi.findViewById(R.id.imgPlayPause); 
     ImageView pause = (ImageView) vi.findViewById(R.id.imgPause); 


     SongModel song = new SongModel(); 
     song = songsListDat.get(position); 
     title.setText(song.getSongTitle()); 

     play.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       mListener.onPlayClicked(position); 
      } 
     }); 
     pause.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       mListener.onPauseClicked(position); 
      } 
     }); 

     return vi; 
    } 

    public interface OnMusicListener { 
     void onPauseClicked(int position); 

     void onPlayClicked(int position); 
    } 
} 

Ensuite, à partir classe d'activité

songAdapter = new SongAdapter(this, songsList,this); 
setListAdapter(songAdapter); 

Après "this " ajouté, vous pouvez maintenant implémente la méthode de l'interface

de que vous pouvez avoir l'événement de clic de chaque lecture/pause de la liste ..

S'il vous plaît dire si besoin d'aide ..

ce sera donc votre activité devrait aimer ce ::

public class MainActivity extends ListActivity implements SongAdapter.OnMusicListener{ 

    public static final String TAG = "[MainActivity]"; 

    Activity activity; 
    SongAdapter songAdapter; 
    SongsManager songsManager = new SongsManager(); 
    MediaPlayer mp; 

    // Songs list 
    public ArrayList<SongModel> songsList = new ArrayList<>(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     activity = MainActivity.this; 


     mp = new MediaPlayer(); 


     SongsManager plm = new SongsManager(activity); 
     final ArrayList<SongModel> songsListData = songsManager.songList; 


     this.songsList = plm.getAllSongs(); 


     for (int i = 0; i < songsListData.size(); i++) { 
      SongModel song = songsListData.get(i); 
      songsListData.add(song); 
     } 


     songAdapter = new SongAdapter(this,songsList,this); 
     setListAdapter(songAdapter); 

     ListView lv = getListView(); 

    } 

    @Override 
    public void onPauseClicked(int position){ 

      //Todo-- Add code you want to perform on Pause clicked with specific position 

    } 
    @Override 
    public onPlayClicked(int position){ 
     //Todo-- Add code you want to perform on Play clicked with specific position 
    } 
} 
+0

je vais essayer ..... –

+0

Voir mes changements sur l'activité, je reçois nullpointer en OnMouseListner et me dire où je me trompe dans ce https://gist.github.com/anonymous/43e3700bc0292623cf71208a41eeae61 –

+0

S'il vous plaît vérifier la modifier le code ... J'ai ajouté le code d'activité aussi. –

0

S'il vous plaît essayer quand vous voulez définir l'image d'un src ListView élément à autre chose lorsque l'élément ListView est tapé.

Utilisez le paramètre view de onItemClick méthode pour changer ImageView de ligne sélectionnée:

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
    ImageView selectedImage = (ImageView) view.findViewById(R.id.buckysImage);  
    selectedImage.setImageResource(R.drawable.selected);     
    } 
0

Vous pouvez simplement passer onclick auditeur à votre adaptateur et réglez cliquez auditeur à votre vue de l'image.

Et lorsque vous définissez votre adaptateur à partir de votre activité, il vous suffit de créer un nouvel écouteur de clic lorsque vous passez des paramètres dans vos méthodes.