簡體   English   中英

另一個SubActibity內的SubActivity

[英]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();
        }
    });
}

你有混合的requestCoderesultCode resultCode應該是預定義的常量之一RESULT_CANCELEDRESULT_OKRESULT_FIRST_USERrequestCode是你的獨特價值- 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM