android从活动D到B意图标志

时间:2015-10-20 09:09:43

标签: android

我是一个新的Android开发者。现在我想开发一个应用程序并实现一个情况  我有4个活动,活动 A-> B-> C-> D
我想从D到B,完成C并恢复B(如果存在,只需执行on-resume) 现在我使用了以下标志:

FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_NEW_TASK

但是这两个标志会导致活动执行onCreate方法。 我在oncreate方法中有很多事情要做,所以我只想恢复活动B.

非常感谢!

更新
现在我在活动D中使用跟随代码(转到活动B),它看起来非常好。还有其他更好的主意吗?

Intent mIntent = new Intent(this,ActivityB.class);
mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(mIntent);

4 个答案:

答案 0 :(得分:1)

如果你想一直从D导航到B,你可以在导航到D时完成C.

在你的C:

    var audioEngine: AVAudioEngine = AVAudioEngine()
    var audioFilePlayer: AVAudioPlayerNode = AVAudioPlayerNode()


    @IBAction func playButton(sender: AnyObject) {

    var file = "file7.pcm"
    var fileManager = NSFileManager.defaultManager()

    var wayToFile = fileManager.URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
    var passMusicFileURL: NSURL?

    if let documentPath: NSURL = wayToFile.first as NSURL! {
        let musicFile = documentPath.URLByAppendingPathComponent(file)

        passMusicFileURL = musicFile

        var audioFile = AVAudioFile()
        var audioBuffer = AVAudioPCMBuffer()

        do{
            audioFile = try AVAudioFile(forReading: passMusicFileURL!)
            let audioFormat = audioFile.processingFormat
            let audioFrameCount = UInt32(audioFile.length)

            audioBuffer = AVAudioPCMBuffer(PCMFormat: audioFormat, frameCapacity: audioFrameCount)

        } catch {
            print("error!!! ")
        }

        do {
            try audioFile.readIntoBuffer(audioBuffer)
        } catch _{
            print("error")
        }

        var mainMixer = audioEngine.mainMixerNode
        audioEngine.attachNode(audioFilePlayer)
        audioEngine.connect(audioFilePlayer, to:mainMixer, format: audioBuffer.format)

        do {
            try audioEngine.start()
        } catch _{

            print("error")
        }

        audioFilePlayer.play()
        audioFilePlayer.scheduleBuffer(audioBuffer, atTime: nil, options: AVAudioPlayerNodeBufferOptions.Loops, completionHandler: nil)
    }
}

答案 1 :(得分:0)

首先不要完成去另一个活动的活动,也要删除 FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_NEW_TASK

并使用  机器人:launchMode =" singleInstance"

在包含B活动的清单文件中

<activity name="B.class"
 android:launchMode="singleInstance"
/>

答案 2 :(得分:0)

您可以调用startAcivityForResult()函数来更改活动并检查意图数据以停止/继续。这很容易,你可以通过这个来处理每一项活动。

答案 3 :(得分:0)

最好使用startactivityforresult 你的要求“我希望从D到B,完成C并恢复B(如果存在,只需执行恢复)。”

从C使用

调用D时

startactivityforresult(intent,requestCode)

现在当您完成D时,只需致电setResult(ResultOK)

并在C活动的onActivityResult上处理此结果并完成那里的c活动

这里自动调用您的B活动onresume

任何进一步的查询请通知我 更多关于startactivityforresult` http://developer.android.com/intl/es/training/basics/intents/result.html 你也可以尝试@Kamalone评论,在调用D时,只要完成C,如果唯一的要求是完成C或者如果你想要处理一些结果就去startactivityforresult