ここで私の少しの学習プロジェクトは、メモを保存するためにダイナミックフラグメントを使用する単純なメモ取りアプリです。読み込まれたテキストを ".txt"ファイルからTextViewに表示する際に問題が発生しています。フラグメントロード後のタスクの処理
デバッグすると、NoteEditFragmentが見つかると、nullになります。これは、私のファイルがTextViewに正しく翻訳されていない可能性が高いためです。私のNoteEditFragmentのsetText関数を呼び出すにはどうすればよいのですか?これを行うより良い方法はありますか?フラグメントをUIのみを扱い、プレゼンターの多くとして私のアクティビティを使用するようにしています。
動作しないシーケンス:
//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")
}