0

我有两个活动 Play.java 和 Home.java,Home.java 包含 Listview 的 onclick 函数并获取 listview 的位置我需要将该位置传递给 Play.java.当我单击 listview“不幸的是应用程序关闭”时

主页.java

public void onItemClick(AdapterView<?> parent, View view, int position,long id) 
{     
    int songindex = position;
    Intent intent = new Intent(this, Play.class);
    startActivity(intent);

    p1.listen(songindex);
}

播放.java

public void change(View v)
    {
        Intent intent = new Intent(this, Home.class);
        startActivity(intent);
    }

    public void listen(int songindex)
    {
    MediaPlayer mPlayer2;
     if(songindex==0)
     {
        mp=MediaPlayer.create(this, R.raw.gayatri);
        mp.start();



     }
     else if(songindex==1)
     {
         mPlayer2= MediaPlayer.create(this, R.raw.brahma);
         mPlayer2.start(); 
     }
    }

当我从列表视图中单击歌曲时,它无法正常工作的应用程序关闭

4

3 回答 3

0

Put listen function in main file

Home.java

public void onItemClick(AdapterView<?> parent, View view, int position,long id) 
{     
    listen(position);
}


    public void listen(int songindex)
    {



    MediaPlayer mPlayer2;
     if(songindex==0)
     {
        mp=MediaPlayer.create(this, R.raw.gayatri);
        mp.start();



     }
     else if(songindex==1)
     {
         mPlayer2= MediaPlayer.create(this, R.raw.brahma);
         mPlayer2.start(); 
     }
    }
于 2013-04-08T07:36:40.420 回答
0

您必须使用意图传递位置。

Home.java

public void onItemClick(AdapterView<?> parent, View view, int position,long id) 
{     
    int songindex = position;
    Intent intent = new Intent(this, Play.class);
    intnt.putExtra("position",position);
    startActivity(intent);

  //  p1.listen(songindex);
}
Play.java

public void change(View v)
    {
        Intent intent = new Intent(this, Home.class);
        startActivity(intent);
    }

    public void listen(int songindex)
    {
     Bundle data = getIntent().getExtras();
         int position = data.getInt("position");

    MediaPlayer mPlayer2;
     if(songindex==0)
     {
        mp=MediaPlayer.create(this, R.raw.gayatri);
        mp.start();



     }
     else if(songindex==1)
     {
         mPlayer2= MediaPlayer.create(this, R.raw.brahma);
         mPlayer2.start(); 
     }
    }
于 2013-04-08T07:14:56.540 回答
0

LogCat 应该可以解决您的问题,但我们仍然没有。

那你为什么需要mp和mp2呢?一次播放两首歌曲?

我只会有一个 mp,在类中声明,而不是在方法中声明,因为在你的情况下,从 listen 方法退出后对 mp2 播放器的引用会丢失,并且无法控制它(实际上,它甚至可能退出方法后停止播放)。

简而言之,这就是我的建议:

MediaPlayer mp; 

static final int table[] songIndexIds= { R.raw.song1, R.raw.song2};


public void listen(int songIndex)
     if (mp != null) {
        mp.stop();
        mp.release();
        mp = null;
     }

     if (songIndex >= 0) {
         mp=MediaPlayer.create(this, songIndexIds[songIndex]);
         mp.start();
     }

}

// "Destructor"
@Override 
public void finalize() {
     if (mp != null) {
        mp.stop();
        mp.release();
     }

}
于 2013-04-08T07:56:50.013 回答