【问题标题】:onActivityResult is not triggered when startActivityForResult from a common method从常用方法启动ActivityForResult时不会触发onActivityResult
【发布时间】:2019-08-13 07:04:27
【问题描述】:

我正在编写一个电视和手机布局使用不同方法的应用程序,它们共享一些常用方法。我将常用方法放入一个单独的类中。在我调用通用方法之前,将“activity”传递给通用类,从通用方法中调用“startActivityForResult”。但是,finish() 不会在调用“Activity”时触发 onActivityResult()。

MainFragment.kt

class MainFragment : BrowseFragment() {
    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        TVHandler.activity = activity
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        //not triggered    
    }
}

TVHandler.kt

import androidx.core.app.ActivityCompat.startActivityForResult
class TVHandler{
    fun play(item: Movie, extra_url: String = ""){    
                val intent = Intent(activity, PlaybackActivity::class.java)
                intent.putExtra("item", item)
                intent.putExtra("url", url)
                startActivityForResult(activity, intent, 0, null)
    }

    companion object {
        lateinit var activity: Activity
    }
}

PlaybackActivity.kt

class PlaybackActivity : FragmentActivity() {
    fun channelSwitch(direction: String, showMessage: Boolean){
        val intent = Intent()
        intent.putExtra("action", "switch")
        intent.putExtra("direction", direction)
        intent.putExtra("showMessage", showMessage)
        this.setResult(Activity.RESULT_OK, intent)
        finish()
    }
}

play() 被调用。一些动作触发了 ChannelSwitch()。但是,不会触发 onActivityResult()。显示 MainActivity,没有记录任何错误。我可以知道如何修改它以使其工作吗?

【问题讨论】:

    标签: android kotlin onactivityresult startactivityforresult


    【解决方案1】:

    onActivityResult 放入托管片段的活动中,以便它可以将值传递给您的片段

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
    }
    

    【讨论】:

    • 哦,它有效。但为什么它适用于活动而不适用于片段?它曾经在片段中工作(在我在TVHandler.kt中编写通用方法之前)
    • 即使片段是调用 startActivityForResult() 的那个,Activity 会首先处理结果,因此您需要调用 super 将结果传递给片段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多