2012-07-17 60 views
0

我開始使用android,我用ListView製作了一個應用程序。 ListView的每個元素都有一個不同的媒體播放器,當您按下按鈕時,它們將播放。在ListView上重現MediaPlayer(Android)

它可以在模擬器中正常工作,但是當我在手機(Acer E140)上試用時,它只會再現最初可見的元素的聲音。當我向下滾動並嘗試重現其他任何內容時,該應用程序崩潰。正如我所說的,它可以在模擬器上正常工作。

任何想法?

非常感謝!

這裏是代碼的相關部分:

public class SoundsActivity extends Activity { 

Dialog dialog; 
final int DIALOGO_ALERTA=1; 
final int DIALOGO_SALIR=2; 
final int DIALOGO_NEW=3; 
final int DIALOGO=4; 
private static final int MNU_OPC1 = 1; 
private static final int MNU_OPC2 = 2; 
Elem[] datos = new Elem[50]; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 
    setContentView(R.layout.main); 
    datos[0]=new Elem ("1.","Rin", MediaPlayer.create(SoundsActivity.this, R.raw.rin)); 
    datos[1]=new Elem ("2.","Shirou", MediaPlayer.create(SoundsActivity.this, R.raw.shirou)); 
    datos[2]=new Elem ("3.","Assasin", MediaPlayer.create(SoundsActivity.this, R.raw.assasin)); 
    datos[3]=new Elem ("4.","Avenger", MediaPlayer.create(SoundsActivity.this, R.raw.avenger)); 
    datos[4]=new Elem ("5.","Rider", MediaPlayer.create(SoundsActivity.this, R.raw.rider)); 
    datos[5]=new Elem ("6.","Berseker", MediaPlayer.create(SoundsActivity.this, R.raw.berseker)); 
    datos[6]=new Elem ("7.","Caster", MediaPlayer.create(SoundsActivity.this, R.raw.caster)); 
    datos[7]=new Elem ("8.","Lancer", MediaPlayer.create(SoundsActivity.this, R.raw.lancer)); 
    datos[8]=new Elem ("9.","Archer", MediaPlayer.create(SoundsActivity.this, R.raw.archer)); 
    datos[9]=new Elem ("10.","Saber", MediaPlayer.create(SoundsActivity.this, R.raw.saber)); 

    SharedPreferences settingss = getSharedPreferences("perfil", MODE_PRIVATE); 
    String empty = ""; 
    for(int i=0; i<datos.length; i++){ 
     empty= empty+ "F"; 
    } 
    String info = settingss.getString("save", empty); 
    salvada(info); 
    class Adaptador extends ArrayAdapter { 
     private MediaPlayer mp=null; 
     Activity context; 

      Adaptador(Activity context) { 
       super(context, R.layout.listitem_titular, datos); 
       this.context = context; 

      } 


      public View getView(final int position, View convertView, final ViewGroup parent) { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      View item = inflater.inflate(R.layout.listitem_titular, null); 

      final TextView lblTitulo = (TextView)item.findViewById(R.id.Nombre); 
      final String nom= datos[position].getNombre(); 
      lblTitulo.setText(nom); 
      TextView numer = (TextView)item.findViewById(R.id.Number); 
      final String num= datos[position].getNum(); 
      //numer.setText(num); 
      String g= "" +position; 
      numer.setText(g); 
      final ImageView img = (ImageView)item.findViewById(R.id.tick); 
      final Button btnn = (Button)item.findViewById(R.id.Check); 
      final ToggleButton bss = (ToggleButton)item.findViewById(R.id.Play); 
      if(datos[position].getGuessed()==true){ 
       lblTitulo.setVisibility(View.VISIBLE); 
       btnn.setVisibility(View.INVISIBLE); 
       img.setVisibility(View.VISIBLE); 
       notifyDataSetChanged(); 
      } 

      bss.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if(mp!= null && mp.isPlaying()){ 
         mp.pause(); 
         mp.seekTo(0); 
        } 
         mp=datos[position].mp; 
         mp.start(); 

       } 
      }); 


      btnn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
     Bundle b = new Bundle(); 
        b.putString("Numero", num); 
        b.putString("Nombre", nom); 
        b.putInt("Posicion", position); 
     showDialog(DIALOGO_ALERTA, b); 
       } 

      }); 

      return(item); 
     } 

    } 

     Adaptador adaptador = new Adaptador(this); 

     ListView lstOpciones = (ListView)findViewById(R.id.LstOpciones); 

     lstOpciones.setAdapter(adaptador);  
} 
+0

你的代碼在哪裏? – 2012-07-17 03:04:39

+0

剛添加它。謝謝! – user1530476 2012-07-17 13:13:43

+0

LogCat也會有所幫助 – 2012-07-17 13:27:25

回答

1

它通常是一個壞主意,在任何給定的程序中使用一個以上的MediaPlayer對象。對於播放多個聲音片段,SoundPool是可接受的解決方案。

http://developer.android.com/reference/android/media/SoundPool.html

MediaPlayer太重創建許多它的實例。否則,我建議用一個MediaPlayer重新設計您的班級,當選擇ListView項目時,它會更改其來源。