6

ユーザーがListViewから再生するサウンドをクリックすると、そのサウンドの再生中に別のサウンドをクリックすると、クリックした2つのサウンドが同時に再生されるという問題があります。

現在再生中のサウンドを終了し、最後にクリックした新しいサウンドを開始したいと考えています。

誰かが私を助けることができれば、それは大歓迎です!

コード:

ListView BoardList = (ListView) findViewById(R.id.BoardList);

    String List[] = {

     "Audio1", "Audio2", "Audio3", "Audio4", "Audio5"
         , "Audio6", "Audio7", "Audio8", "Audio9"
           , "Audio10", "Audio11", "Audio12" };

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.listcustomize, R.id.textItem, List);

    BoardList.setAdapter(adapter);

    BoardList.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            MediaPlayer mPlayer = null;
            if (position == 0) {



                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio1);
                mPlayer.start();
            }

            if (position == 1) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio2);
                mPlayer.start();

            }
            if (position == 2) {


                mPlayer = MediaPlayer.create(HodgeMain.this, R.raw.Audio3);
                mPlayer.start();

            }
            if (position == 3) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio4);
                mPlayer.start();
            }
            if (position == 4) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio5);
                mPlayer.start();
            }
            if (position == 5) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio6);
                mPlayer.start();
            }
            if (position == 6) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio7);
                mPlayer.start();
            }

            if (position == 7) {


                mPlayer = MediaPlayer
                        .create(HodgeMain.this, R.raw.Audio8);
                mPlayer.start();
            }
            if (position == 8) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio9);
                mPlayer.start();
            }
            if (position == 9) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio10);
                mPlayer.start();
            }
            if (position == 10) {


                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio11);
                mPlayer.start();
            }
            if (position == 11) {

                mPlayer = MediaPlayer.create(HodgeMain.this,
                        R.raw.Audio12);
                mPlayer.start();

            }
4

4 に答える 4

6
Media player playing multiple files at the same time

試す

MediaPlayer mPlayer; すべてに共通であることを宣言する

お気に入り

BoardList.setAdapter(adapter);
MediaPlayer mPlayer;

次に使用しますmPlayer.release();

if (position == 0) {

    if(mPlayer!=null)
    {
        mPlayer.release();
        mPlayer=null;
    }

    mPlayer = MediaPlayer.create(HodgeMain.this,
            R.raw.Audio1);
    mPlayer.start();

}
.
.
.
.
if(position==N)
{
        if(mPlayer!=null)
        {
            mPlayer.release();
            mPlayer=null;
        }
        mPlayer = MediaPlayer.create(HodgeMain.this,
                R.raw.AudioN);
        mPlayer.start();
}

release():

Releases resourcesこれに関連付けられていMediaPlayer objectます。

を使い終わったら、このメソッドを呼び出すことをお勧めしますMediaPlayer

特に、アプリケーションでオブジェクトを維持する特別な必要がない限りActivity of an application is paused (its onPause() method is called), or stopped (its onStop() method is called)、このメソッドは である必要があります。invoked to release the MediaPlayer object

PS。私はrelease()うまくいっていると試してみました!

例:私のために働いています

try {

if (position == 1) {
    if (mPlayer != null) {
        mPlayer.release();
        mPlayer = null;
    }
    mPlayer = MediaPlayer.create(MainActivity.this, R.raw.all);
    mPlayer.start();
}
if (position == 2) {
    if (mPlayer != null) {
        mPlayer.release();
        mPlayer = null;
    }
    mPlayer = MediaPlayer.create(MainActivity.this, R.raw.all2);
    mPlayer.start();
}
}

catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
}
于 2013-08-21T16:35:12.437 に答える
0

すでに述べたように、現在行っているように静的ではなく、クラス内の任意の場所にあるオブジェクトにアクセスするためにMediaPlayerクラスをインスタンス化する必要があります。このドキュメントを参照すると、http://developer.android.com/reference/android/media/MediaPlayer.htmlnewについてさらに理解するのに役立つと確信しています。MediaPlayer

于 2013-08-21T16:38:55.130 に答える
0

開始する前に、次のことを検討してください。

if(mPlayer.isPlaying()) mPlayer.stop();
mPlayer.start();

ステートメント内に実装してif、それが機能するかどうかを確認してください!

ただし、これを機能させるには、MediaPlayerオブジェクトをより広いスコープで定義する必要があり、毎回新しいMediaPlayerオブジェクトを宣言する必要はありません。

于 2013-08-21T16:35:01.153 に答える