![](/img/trans.png)
[英]How to open SubActivity of an application inside another application
[英]SubActivity inside another SubActibity
我正在開發一個mediaPlayer應用程序,我正在為我的播放列表使用ListViews。 我有主要活動有mediaPlayer,當用戶點擊播放列表按鈕時,ArtistActivity就會啟動,用戶可以從中啟動SongActivity。 我看了很多教程和示例,但由於某些原因,SongActivity將“0”傳遞回主要活動,並使用歌曲URL播放ArrayList中的第一首曲目。 任何幫助將非常感激。 請幫忙。 謝謝。
主要活動:
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();
}
});
}
你有混合的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);
因為ArtistActivity中的onActivityResult
等待代碼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問題和這個標志的良好解釋 (以及其他標志)。 如果您通過中間活動將結果傳回而不進行任何處理,那么該標志是有用的,“按原樣”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.