2016-07-08 112 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()?