2017-11-27 11 views
0

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

답변

0

조각 자체는 진행을위한 자체 프로세스가 있으므로 생성 된 즉시 사용할 수 없습니다. 표현 자 구조를 유지하려면, 프래그먼트를 조정할 동반자 발표자 객체를 만들어서 활동을 통해 제어하지 않고 조각을 조정해야합니다.