当按下Action Bar后退按钮时,永远不会调用Kotlin覆盖的onBackPressed()函数

时间:2019-02-12 23:43:23

标签: android kotlin

我已经看到这个问题到处都是,但是我还没有看到任何人能够回答为什么不调用该函数的情况。

我已经在调试模式下运行了该应用程序,并在onBackPressed函数上设置了一个断点,并且它完全忽略了它。编译器甚至可以识别我的红色断点并将其更改为带有一条直线的圆圈。

我有一个带有setOnClickListener的ContractSelectAdapter,它使用putExtra()将选定的合同传递给ContractMenuActivity。在ContractMenuActivity中,有一个按钮可以打开下面的活动,即UploadImageActivity,而在该活动中,我希望用户能够单击后退按钮以重新打开ContractMenuActivity,但是在ContractMenuActivity的onCreate函数中是一个getStringExtra调用,导致该操作崩溃,因为没有“额外”。这就是为什么我尝试使用onBackPressed的原因。从理论上讲,它应该工作完美。

我尝试在UploadImageActivity的onCreate函数中手动调用onBackPressed函数,以确保它可以正常工作。它立即打开ContractMenuActivity。因此该函数可以正常工作,因为某种原因它永远不会被调用。极其沮丧。

onBackPressed函数位于UploadImageActivity类的末尾(第一段代码摘录)

任何帮助将不胜感激。

class UploadImageActivity : AppCompatActivity() {    

    var prefs: Prefs? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_upload_image)
        prefs = Prefs(this)    
    }

    override fun onBackPressed()
    {
        super.onBackPressed()
        val returnIntent = Intent(this, ContractMenuActivity::class.java)
        returnIntent.putExtra(SELECTED_CONTRACT, prefs!!.rmsAppContractID)
        startActivity(returnIntent)
    }

}

class ContractMenuActivity : AppCompatActivity()
{
    var selectedContract: String = ""
    var prefs: Prefs? = null


    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_contract_menu)
        prefs = Prefs(this)

        val btnUploadImage = findViewById<Button>(R.id.btnUploadImage)

        selectedContract = intent.getStringExtra(SELECTED_CONTRACT)
        prefs!!.rmsAppContractID = this.selectedContract


        var contractSelectMsg = "Contract ${prefs!!.rmsAppContractID} selected"
        val duration = Toast.LENGTH_SHORT
        Toast.makeText(this, contractSelectMsg, duration).show()

        btnUploadImage.setOnClickListener {this.openUploadImage()}

    }

    public fun openUploadImage()
    {

        val registered =  prefs!!.rmsAppRegistered
        var message: String

        if(registered)
        {
            val intent = Intent(this, UploadImageActivity::class.java)
            startActivity(intent);
        }
        else
        {
            message = "You must Pair this device before you can upload an image."
            val intent = Intent(this, PostResponseMessageActivity::class.java).apply {
                putExtra(POST_RESPONSE_MESSAGE, message)
            }
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);

        }
    }

}

清单中的父母姓名:

    <activity
            android:name=".ContractMenuActivity"
            android:label="@string/contractMenuLabel"
            android:parentActivityName=".ContractSelectActivity">

    </activity>
    <activity
            android:name=".UploadImageActivity"
            android:label="@string/uploadImageLabel"
            android:parentActivityName=".ContractMenuActivity">
    </activity>

1 个答案:

答案 0 :(得分:-1)

super.onBackPressed() 将完成当前活动。如果要在用户按下“后退”按钮后执行某些操作,则必须将代码粘贴到 super.onBackPressed()的顶部。