Обработка задачи после загрузки фрагментов

Мой небольшой учебный проект – это простое приложение для заметок, которое использует динамические фрагменты для сохранения заметок. У меня возникла проблема, когда дело доходит до отображения загруженного текста из файла «.txt» в TextView.

Отладка показывает, что когда я иду искать свой NoteEditFragment , он равен нулю. Вероятно, это причина, по которой мой файл неправильно переводится в TextView. Как мне обратиться за помощью к функции setText моей NoteEditFragment только после появления Фрагмента? Есть лучший способ сделать это? Я стараюсь, чтобы фрагменты обрабатывали только пользовательский интерфейс и использовали мою активность как более презентационную.

Последовательность, которая не работает:

//Interfaces override fun noteEditSaveClicked(note: String) { saveNote(note) swapFragments() openNote() } 

Последовательность, которая работает (вероятно, потому, что она ждет, пока Фрагмент не будет загружен)

  override fun onStart() { super.onStart() openNote() } 

Полный код деятельности:

 package com.inviscidlabs.kotlinnotes import android.os.Bundle import android.support.v4.app.Fragment import android.support.v7.app.AppCompatActivity import android.view.Menu import android.view.MenuItem import kotlinx.android.synthetic.main.activity_note_home.* import java.io.File class NoteHome : NoteHomeFragmentEvent, NoteEditAction, AppCompatActivity() { //Lifecycle override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_note_home) setSupportActionBar(toolbar) swapFragments() } override fun onStart() { super.onStart() openNote() } override fun onCreateOptionsMenu(menu: Menu): Boolean { // Inflate the menu; this adds items to the action bar if it is present. menuInflater.inflate(R.menu.menu_note_home, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.action_settings -> true else -> super.onOptionsItemSelected(item) } } //Local Functions private fun openNote(){ var printText = "" File(this.filesDir, "note.txt").bufferedReader().forEachLine { line -> printText += line } val f: NoteHomeFragment? = supportFragmentManager.findFragmentByTag(FragmentIDs.HOME.fragID) as NoteHomeFragment? f?.setNote(printText) } private fun swapFragments() { val replaceFragment = { frag: Fragment, fragTag: String -> supportFragmentManager.beginTransaction().replace(R.id.anh_fragContainer, frag, fragTag).commit() } if (supportFragmentManager.fragments.size > 0) { if (supportFragmentManager.findFragmentByTag(FragmentIDs.NOTEEDIT.fragID) == null) { replaceFragment(NoteEditFragment(), FragmentIDs.NOTEEDIT.fragID) } else { replaceFragment(NoteHomeFragment(), FragmentIDs.HOME.fragID) openNote() } } else { replaceFragment(NoteHomeFragment(), FragmentIDs.HOME.fragID) openNote() } } fun saveNote(noteBody: String){ File(this.filesDir, "note.txt").bufferedWriter().use { out -> out.write(noteBody) } } //Interfaces override fun noteEditSaveClicked(note: String) { saveNote(note) swapFragments() openNote() } override fun addNoteFabClicked() { swapFragments()} } enum class FragmentIDs (val fragID: String){ NOTEEDIT("NoteEditFragment"), HOME("NoteHomeFragment") } 

Фрагмент не доступен сразу, потому что он имеет свой собственный процесс для прохождения. Если вы хотите сохранить структуру презентатора, вы должны создать объект-презентатор-компаньон для фрагмента, который будет координировать фрагмент, а не управлять им через Activity.

Intereting Posts
Unity (C #) -> Kotlin <- Coroutines Как мне выполнить «перерыв» или «продолжить», когда в функциональном цикле внутри Котлина? Kotlin: java.lang.UnsupportedOperationException в элементе добавления MutableList Пустой цвет плитки MapView на Android ArrayAdapter использует Kotlin android Только первый тест проходит с TestScheduler при запуске нескольких тестов (Kotlin) Kotlin: установка частного булева класса Java через класс Data в Котлине. Почему я не могу это сделать? Ошибка коплинской капсулы Прочитайте текстовый объект (текстовый файл из папки с данными) в виде строки в Kotlin (Android) Переопределить версию зависимостей весеннего загрузчика с помощью gradle kotlin-dsl RxKotlin – Single.just () не выделяется при подписке на TestSubscriber Как написать функции расширения в Котлин? Android studio 2.3: Не удалось инициализировать класс org.jetbrains.kotlin.android.actions.NewKotlinActivityAction Как получить доступ к членам внутреннего объекта в Котлине Можно ли использовать метод данных equals () класса Kotlin без дальнейшей модификации в сочетании с JPA?