2016-06-06 8 views
0

Ich habe eine Recyclerview mit 10 Elemente jeweils mit einer Audiodatei.Android: Erstellen von Variablen Namen programmatisch für eine Recyclerview

Ich möchte Mediaplayer Variablen mit ihren Namen wie Medien1, media2 .... media [Gesamtzahl der Elemente in der recyclerview]

dann in onBindview i Variablennamen verwenden möchten, schaffen, um die Position entspricht.

public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) { 

    mp = media+"position" 
    mp = MediaPlayer.create(viewHolder.itemView.getContext(), Uri.parse(context.getExternalFilesDir("krishna").getPath() + "/" + planDetailLists.get(i - 2).placechildplaces_audiodetailfilename)); 
    mp.start(); 
    } 

Warum ich tue dies ist, mag ich jedes Element seine Mediaplayer Variable erinnern, so dass ich nur diese bestimmte Audiodatei Pause spielen kann, und nicht die anderen Elemente Audiodatei.

Sonst, was ich gefunden habe, ist Audio von anderen Element gespielt, wenn ich Play-Taste eines anderen Elements drücken. Wenn ich ein Element [1 [Audio] pausiere und das andere Element [2] Audio abspiele, setzt es Element [1] Audio von seiner Pause-Position fort.

Ich bin nicht in der Lage, die Audiodateien jedes Elements zu verwalten. alles wird durcheinander gebracht.

+0

Sie als String.valueOf (Position); –

+0

was willst du eigentlich erreichen? – pskink

+0

oder gibt es eine Möglichkeit, die Mediaplayer-Instanz für dieses bestimmte Objekt zu verfolgen –

Antwort

0

Dafür ist die einfachste Sache, eine HashMap<String, MediaPlayer> zu verwenden. So würdest du den Media Player mit seinem String-Namen aus der Karte holen.

EDIT:

Oder daran denken, die die MediaPlayer Instanz in Ihrer RecyclerView.ViewHolder Implementierung. Aber hüte dich vor dem Recycling der Halter.

EDIT 2:

Um eine MediaPlayer Instanz in einer Ansicht Halter erinnern Sie es in der onBindViewHolder Methode retten würde. Beispiel:

public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) { 
    // First cast to your view holder implementation which has a public instance variable MediaPlayer mediaPlayer; 
    // Just for easy access of instance variables 
    MyViewHolder holder = (MyViewHolder)viewHolder; 

    if (holder.mediaPlayer == null) { 
     // If there is no MediaPlayer on this view holder create a new one. 
     holder.mediaPlayer = MediaPlayer.create(viewHolder.itemView.getContext(), Uri.parse(context.getExternalFilesDir("krishna").getPath() + "/" + planDetailLists.get(i - 2).placechildplaces_audiodetailfilename)); 
     mp.start(); 
    } 
    else { 
     // Stop playing this media player... 

     // Re-use the current media player or create a new one... 

     // Now play the new sound with similar code as in the IF branch above... 
    } 
} 
+0

Wie erinnere ich mich an die Instanz des MediaPlayers –

+0

Überprüfen Sie meine aktualisierte Antwort. Dies ist grundlegendes Java. – shelll

+0

Ich versuche edit2 –

1

Warum Sie wollen es als dynamischen Variable zu nehmen, wenn Sie dies leicht durch Anordnung von Mediaplayer tun.

Deklarieren Sie einfach eine Arrayvariable für den Mediaplayer und initialisieren Sie sie dann, wenn Sie Daten erhalten, und verwenden Sie sie dann im Viewholder.

MediaPlayer allMPlayers[]; 

nach Abrufen von Daten initialisieren wie

allMPlayers = new MediaPlayer[list.size()]; 

jetzt in Halter verwenden, wie unten,

public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) { 

     mp = allMPlayers[position]; 
     mp = MediaPlayer.create(viewHolder.itemView.getContext(), Uri.parse(context.getExternalFilesDir("krishna").getPath() + "/" + planDetailLists.get(i - 2).placechildplaces_audiodetailfilename)); 
     mp.start(); 
} 
+0

Ich habe Play/Pause-Taste auf meinem Artikel. Jedes Element wird eine andere Audiodatei haben. Ich möchte, dass der Ton immer noch spielt, wenn ich zurückgehe. So, wie man auf die mediaplayer Variable verweist, die bereits läuft, wenn ich zu dieser Audioliste Seite zurückkomme –

Verwandte Themen