首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SubActivity在另一个SubActibity中

SubActivity在另一个SubActibity中
EN

Stack Overflow用户
提问于 2012-12-26 10:19:30
回答 1查看 187关注 0票数 0

我正在开发一个mediaPlayer应用程序,我正在使用ListViews作为播放列表。我有一个包含mediaPlayer的主要活动,当用户单击播放列表按钮时,ArtistActivity启动,用户可以从其中启动SongActivity。我看过许多教程和例子,但出于某种原因,SongActivity将"0“传递回主要活动,并使用歌曲URL在ArrayList中播放第一首曲目。任何帮助都将不胜感激。请帮帮忙。谢谢。

MainActivity:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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();
        }
    });
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-26 10:57:14

你把requestCoderesultCode混在一起。resultCode应该是预定义的常量RESULT_CANCELEDRESULT_OKRESULT_FIRST_USER等。requestCode是您的唯一值- 50、100等。

而且,在相同的活动中,requestCodestartActivityForResult调用中和onActivityResult处理程序中应该是相同的。

例如,在SongActivity中,您应该调用:

代码语言:javascript
复制
setResult(RESULT_OK, in3);

ArtistActivity中,您应该调用:

代码语言:javascript
复制
startActivityForResult(in2, 50);

因为ArtistActivity中的onActivityResult正在等待代码50。

代码语言:javascript
复制
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

您还可以使用标志;有一个相关的所以问题和一个很好地解释了这面旗帜 (以及其他标志)。如果您在没有任何处理的情况下通过中间活动传递结果,则该标志是有用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14039150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档