Как получить предыдущую активность в Android Kotlin - PullRequest
0 голосов
/ 28 ноября 2018

Допустим, мое задание по умолчанию MainActivity, и я запускаю другое занятие DepositActivity без , используя finish() в MainActivity

Теперь, как я могу получить доступ к экземпляру MainActivity внутри DepositActivity

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Вы должны объявить как переменный объект переменную и метод в MainActivity.Статический тип переменных и методов объявлен как сопутствующий объект в Kotlin.

Посмотрите на приведенный ниже пример,

Объявите переменные и методы в MainActivity,

val value : String = "hello from Main"

companion object {

    lateinit var instance : MainActivity

    fun getInstancem() : MainActivity {

        return instance
    }
}

Используйте этот экземпляр и напечатайте значение в DepositActivity например,

Log.d("log_in_second_activity", "message " + MainActivity.getInstancem().value)

Вы можете увидеть сообщение журнала.

Надеюсь, что это даст вам подсказку.

0 голосов
/ 28 ноября 2018
  1. Если вы хотите получить какой-либо результат из DepositActivity, используйте метод startActivityForResult(..., DepositActivity::class.java)MainActivity переопределить onActivityResult метод:

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        // retrieve data using 'data' variable
    }
    

    В DepositActivity вам необходимо установить данные, используя метод setResult() до окончания DepositActivity.

  2. Если вы хотите передать некоторые данные в DepositActivity, используйте для этого intent, например:

    val intent = Intent(this, DepositActivity::class.java)
    intent.putExtra("Extra_Name", /*Some Data*/)
    startActivity(intent)
    
  3. Не рекомендуется : использовать статическую ссылку наMainActivity (не забудьте удалить его методом onDestroy()):

    class MainActivity : AppCompatActivity() {
       companion object {
            @SuppressLint("StaticFieldLeak")
            @JvmStatic
            var instance: MainActivity? = null
       }
    
       override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            instance = this
       }
    
       override fun onDestroy() {
           instance = null
           super.onDestroy()
       }
    }
    

    В DepositActivity вы можете получить к нему доступ следующим образом:

    MainActivity.instance?./* call some method or property */
    

    Но вы не должны полагаться на onDestroy() вызываемого, потому что существуют ситуации, когда система просто завершит процесс хостинга активности, не вызывая этот метод (или любые другие) в нем ... Таким образом, вы можете иметьутечка памяти

0 голосов
/ 28 ноября 2018

Теперь, как мне получить доступ к экземпляру MainActivity внутри DepositActivity

AFAIK Невозможно получить доступ к экземпляру одного действия в другом действии

если у вас есть этот тип требования, чем Попробуйте управлять, используя Fragments

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