2016-07-08 68 views
-1

我正在创建音乐播放器。我想从ListView播放选定的歌曲。但是当我点击列表视图中的特定项目(歌曲)。我没有收到我在第二课中点击的项目(歌曲)。玩家总是从列表中选择第一首歌曲并播放第一首歌曲。我认为代码存在问题。请检查并纠正。由于通过意向发送SongIndex

TAB1(发送级)

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    int songIndex = position; 

    // Starting new intent 
    Intent in = new Intent(getActivity(), NowPlaying.class); 
    // Sending songIndex to PlayerActivity 
    in.putExtra("songIndex", songIndex); 
    getActivity().setResult(100, in); 
    // Closing PlayListView 
    getActivity().finish(); 
    startActivity(in); 
} 

NowPlaying(接收级)

/** 
* Receiving song index from playlist view 
* and play the song 
*/ 
@Override 
protected void onActivityResult(int requestCode, 
           int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == 100) { 
     currentSongIndex = data.getExtras().getInt("songIndex"); 
     // play selected song 
     playSong(currentSongIndex); 
    } 

} 
+0

那些是2类不同的应用程序?你为什么不通过一个额外的意图?无论如何,你不是开始结果。这有点令人困惑 – user6547359

+0

NowPlaying.class中的onCreate方法如何? –

+0

@ user6547359这两个类是相同的应用程序。在第一节课中,歌曲被加载到listView中。当我点击任何歌曲时,接收歌曲索引的班级不播放该歌曲。 –

回答

0

这可以帮助你 https://developer.android.com/training/basics/intents/result.html

从第一个活动,你需要请致电startActivityForResult()代替startActivity()。之后

,并从即将使用finish()活动不叫startActivity()调用老年活动结束前返回你刚才设置的结果,结果的活动上此活动不要叫finish()

请勿在第二个活动中为意图构造函数使用类名称。用户默认意向构造

0

要通过歌曲的位置

TAB1

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

    Intent in = new Intent(getActivity(), NowPlaying.class); 
    in.putExtra("songIndex", position); 
    startActivity(in); 
    getActivity().finish(); 

} 

NowPlaying(接收级)

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_name); //insert here you activity's xml layout 
    currentSongIndex = getExtras().getInt("songIndex"); 
// currentSongIndex now holds an integer value, the position of the song selected from your list. After that you should call your function to play the specific song 
} 
+0

如果您因为任何原因需要它,请将额外的100个“结果”添加到其中。 – user6547359

0

看到有两件事情:

  1. 如果你想通过Intent对象传递,并希望得到它你需要接受它onCreate这样的另一个类:

    在NowPlaying(接收级)

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        currentSongIndex = getIntent().getStringExtra("songIndex");    
    } 
    
  2. 如果您想要在onActivityResult中完成,那么您的NowPlaying活动必须已启动Tab1ActivitystartActivityForResult()。而就在Tab1


开始在onListItemClick活动无需编辑:

你需要站下我猜的区别:Difference between startActivityForResult() and startActivity()?