Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ListView(Android)上复制MediaPlayer_Android_Listview_Scroll_Media Player - Fatal编程技术网

在ListView(Android)上复制MediaPlayer

在ListView(Android)上复制MediaPlayer,android,listview,scroll,media-player,Android,Listview,Scroll,Media Player,我从android开始,制作了一个带有ListView的应用程序。ListView的每个元素都有一个不同的Mediaplayer,当您按下一个按钮时,可以播放该播放器 它在模拟器中工作正常,但当我在手机(Acer E140)上试用时,它只会再现最初可见的元素的声音。当我向下滚动并尝试复制任何其他内容时,应用程序崩溃。正如我所说,它在模拟器上正常工作 有什么想法吗 多谢各位 以下是代码的相关部分: public class SoundsActivity extends Activity { Di

我从android开始,制作了一个带有ListView的应用程序。ListView的每个元素都有一个不同的Mediaplayer,当您按下一个按钮时,可以播放该播放器

它在模拟器中工作正常,但当我在手机(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);      
}
public class SoundsActivity扩展活动{
对话;
最终int对话框O_ALERTA=1;
最终int对话框O_SALIR=2;
最终int对话框O_NEW=3;
最终int DIALOGO=4;
专用静态最终int MNU_OPC1=1;
专用静态最终int MNU_OPC2=2;
Elem[]datos=新Elem[50];
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
这个.setVolumeControlStream(AudioManager.STREAM_MUSIC);
setContentView(R.layout.main);
datos[0]=新元素(“1.”,“Rin”,MediaPlayer.create(SoundsActivity.this,R.raw.Rin));
datos[1]=新元素(“2.”,“Shirou”,MediaPlayer.create(SoundsActivity.this,R.raw.Shirou));
datos[2]=新元素(“3.”,“Assasin”,MediaPlayer.create(SoundsActivity.this,R.raw.Assasin));
datos[3]=新元素(“4.”,“复仇者”,MediaPlayer.create(SoundsActivity.this,R.raw.Avenger));
datos[4]=新元素(“5.”,“Rider”,MediaPlayer.create(SoundsActivity.this,R.raw.Rider));
datos[5]=新元素(“6.”,“Berseker”,MediaPlayer.create(SoundsActivity.this,R.raw.Berseker));
datos[6]=新元素(“7.”,“施法者”,MediaPlayer.create(SoundsActivity.this,R.raw.Caster));
datos[7]=新元素(“8.”,“Lancer”,MediaPlayer.create(SoundsActivity.this,R.raw.Lancer));
datos[8]=新元素(“9.”,“Archer”,MediaPlayer.create(SoundsActivity.this,R.raw.Archer));
datos[9]=新元素(“10.”,“军刀”,MediaPlayer.create(SoundsActivity.this,R.raw.Saber));
SharedReferences settingss=GetSharedReferences(“perfil”,MODE\u PRIVATE);
字符串为空=”;

对于(int i=0;i而言,在任何给定程序中使用多个
MediaPlayer
对象通常是一个坏主意。对于播放多个声音片段,
SoundPool
是公认的解决方案


MediaPlayer
太重,无法创建那么多实例。否则,我建议使用单个
MediaPlayer
重新设计您的类,当选择
ListView
项时,该类会更改其源代码。

日志猫中没有错误。ADV中的一切都正常工作。问题出现在我构建.ap时在我的手机上安装它。你试过在手机上调试吗?如果它崩溃,LogCat中应该有一些堆栈跟踪。