SubActivity внутри другого SubActibity
Я работаю над приложением mediaPlayer, для которого я использую ListViews для своего плейлиста. У меня есть основное действие, которое имеет MediaPlayer, и когда пользователь нажимает кнопку списка воспроизведения, ArtistActivity запускается, из которого пользователь может запустить SongActivity. Я просмотрел многочисленные учебные пособия и примеры, но по какой-то причине SongActivity передает "0" в основное действие и воспроизводит первый трек в ArrayList с URL-адресами песен. Любая помощь приветствуется. Пожалуйста помоги. Спасибо.
Основная деятельность:
btnPlaylist.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Intent i = new Intent(getApplicationContext(),ArtistActivity.class);
startActivityForResult(i, 100);
}
});
}
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == 50)
{
currentSongIndex = data.getExtras().getInt("songIndexArtist");
songIndex = currentSongIndex;
// play selected song
playSong(currentSongIndex);
// Displaying Song title
String songTitle =
songsList.get(currentSongIndex).get("songTitle");
songTitleLabel.setText(songTitle);
}
ArtistActivity:
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//int artistIndex = position;
// Starting new intent
Intent in2 = new Intent(getApplicationContext(),SongActivity.class);
startActivityForResult(in2,100);
setResult(100,in2);
in2.putExtra("songIndexArtist", songIndexArtist);
finish();
}
});
}
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == 50)
{
songIndexArtist = data.getExtras().getInt("songIndex");
}
}
SongActivity:
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(), "DOWNLOADING, PLEASE WAIT", Toast.LENGTH_LONG).show();
// getting listitem index
int songIndex = position;
// Starting new intent
Intent in3 = new Intent(getApplicationContext(),
AndroidBuildingMusicPlayerActivity.class);
// Sending songIndex to PlayerActivity
in3.putExtra("songIndex", songIndex);
setResult(50,in3);
// Closing PlayListView
finish();
}
});
}
1 ответ
Вы смешали requestCode
а также resultCode
, resultCode
должна быть одной из предопределенных констант RESULT_CANCELED
, RESULT_OK
, RESULT_FIRST_USER
и т.п. requestCode
Ваши уникальные ценности - 50, 100 и т. д.
Так же requestCode
должно быть то же самое в startActivityForResult
позвонить и в onActivityResult
Обработчик в той же деятельности.
Например, в SongActivity вы должны вызвать:
setResult(RESULT_OK, in3);
и в ArtistActivity вы должны позвонить:
startActivityForResult(in2, 50);
потому что ваш onActivityResult
в ArtistActivity ждет код 50.
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent in2 = new Intent(getApplicationContext(), SongActivity.class);
// Starting SongActivity and wait for results with requestCode 50
startActivityForResult(in2, 50);
}
});
}
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 50 && resultCode == RESULT_OK)
{
// get results from SongActivity (requestCode = 50)
songIndexArtist = data.getExtras().getInt("songIndex");
// now pass the same data into MainActivity
Intent result = new Intent();
result.putExtra("songIndexArtist", songIndexArtist);
setResult(RESULT_OK, result);
finish();
}
}
Обратите внимание, что я заменил resultCode на requestCode.
Вы должны исправить MainActivity аналогичным образом.
Также вы можете использовать FLAG_ACTIVITY_FORWARD_RESULT
флаг; есть связанный вопрос SO и хорошее объяснение этого флага (среди других флагов). Флаг полезен, если вы передаете результаты через промежуточные действия без какой-либо обработки, "как есть".