Перезаписанная Kotlin функция onBackPressed () никогда не вызывается при нажатии кнопки возврата на панели действий - PullRequest
0 голосов
/ 13 февраля 2019

Я видел этот вопрос повсеместно, но я не видел, чтобы кто-нибудь смог ответить, почему функция не вызывается.

Я запустил приложение в режиме отладки.с точкой останова, установленной в функции onBackPressed, и она полностью игнорирует ее.Компилятор даже распознает и меняет мою красную точку останова на кружок с линией, проходящей через него.

У меня есть ContractSelectAdapter с setOnClickListener, передающий выбранный контракт в ContractMenuActivity с помощью putExtra ().После того, как в ContractMenuActivity есть кнопка, чтобы открыть действие ниже, UploadImageActivity, и в то время как в упражнении я хочу, чтобы пользователь мог нажать кнопку «Назад», чтобы снова открыть ContractMenuActivity, но внутри функции onCreate в ContractMenuActivity есть вызов getStringExtra, вызывающий ее.потерпеть крах, потому что нет "лишнего".Вот почему я пытаюсь использовать onBackPressed.Теоретически это должно работать идеально.

Я пытался вручную вызвать функцию onBackPressed в функции onCreate UploadImageActivity, чтобы убедиться, что она работает и работает.Это немедленно открывает 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 голосов
/ 13 февраля 2019

super.onBackPressed () Завершит текущее действие.Если вы хотите выполнить какое-либо действие после того, как пользователь нажмет кнопку «Назад», вы должны вставить свой код в верхнюю часть super.onBackPressed () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...