여기 약간의 학습 프로젝트는 동적 조각을 사용하여 메모를 저장하는 간단한 메모 작성 응용 프로그램입니다. 로드 된 텍스트를 ".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")
}