Как передать объект «Упражнение» из одного упражнения обратно в основное действие - PullRequest
0 голосов
/ 07 октября 2019

У меня есть пустой MutableList 'Упражнений' в моей основной деятельности.

val exercisesList : MutableList<Exercise> = arrayListOf()

Затем я открываю новую операцию с

val intent = Intent(context, ExerciseCatalogueActivity::class.java)
startActivity(intent)

В новойактивность У меня есть RecyclerView из Упражнений, где я хочу щелкнуть по элементу, чтобы закрыть упражнение и передать упражнение обратно в список изменяемых упражнений MainActivity.

Ответы [ 3 ]

2 голосов
/ 07 октября 2019

Вы можете использовать startActivityForResult вместо startActivity.

Вот пример

class MainActivity : Activity(){
    const val REQUEST_CODE = 10001

    override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)

          setContentView(R.layout.activity_main)

          // your implementation
          Intent(this,SomeActivity::class.java).apply {
                // add your data to intent
                startActivityForResult(this,REQUEST_CODE)
          }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        when (requestCode) {
             REQUEST_CODE -> handleResult(resultCode,data)
             else ->super.onActivityResult(requestCode,resultCode,data)
        }
    }

    fun handleResult(result:Int,data:Intent?){
        if(result!=Activity.RESULT_OK) return
        if(data == null) return

        val someData = data.getSerializableExtra("key")
        // do your stuff with someData
    }
}

в вашем SecondActivity, вы должны использовать метод setResult для передачи ваших данныхактивность вызывающего абонента (или MainActivity в данном случае).

class SecondActivity : Activity(){

     // your implementation of activity

    fun sendSuccessResult(someData:Exercise){
        setResult(Activity.RESULT_OK,Intent().apply{ putExtra("key",someData) })
        finish()
    }
}

Позвонив по номеру sendSuccessResult и передав ваши данные, данные будут отправлены обратно на ваш MainActivity.

Подробнее об этом можно прочитать здесь https://developer.android.com/reference/android/app/Activity

0 голосов
/ 07 октября 2019

Вы можете поместить свой exercisesList в companion object вашего MainActivity, а затем вызвать его из другого действия;например static переменные в Java, если вы знаете этот язык.

Таким образом:

MainActivity.kt:

class MainActivity : Activity { // don't mind if this is different
    ...
    companion object {
        val exercisesList : MutableList<Exercise> = arrayListOf()
    }
}

ExerciseCatalogueActivity.kt:

class ExerciseCatalogueActivity : Activity { // same as before

    ... onCreate (...) {
        MainAcitivity.exercisesList.doWhatYouWant
    }
}
0 голосов
/ 07 октября 2019

Вы должны startActivityForResult см. https://developer.android.com/training/basics/intents/result

Вы можете передать свой объект в и из Деятельности в виде данных, которые можно обработать

https://developer.android.com/reference/android/content/Intent#putExtra(java.lang.String,%20android.os.Parcelable)

Для создания вашего объектаParcelable

Как я могу сделать свои настраиваемые объекты Parcelable?

(Можно также использовать Serializable для передачи сериализованного объекта, но менее похож на Android)

...