Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. class PersonFragment : Fragment() {
  2.  
  3. companion object DemoViewModelFactory : ViewModelProvider.Factory {
  4.  
  5. // todo zavanton - replace by di
  6. private val viewModel: PersonViewModel = PersonViewModel(PersonInteractor(PersonRepo()))
  7.  
  8. override fun <T : ViewModel?> create(modelClass: Class<T>): T = viewModel as T
  9. }
  10.  
  11. private lateinit var viewModel: IPersonViewModel
  12.  
  13. private val actions: Subject<MviAction> = PublishSubject.create()
  14.  
  15. override fun onCreate(savedInstanceState: Bundle?) {
  16. super.onCreate(savedInstanceState)
  17.  
  18. ViewModelProviders.of(this, DemoViewModelFactory)
  19. .get(PersonViewModel::class.java)
  20. .also {
  21. viewModel = it
  22. viewModel.listenForActions(actions)
  23. }
  24. }
  25.  
  26. override fun onCreateView(
  27. inflater: LayoutInflater,
  28. container: ViewGroup?,
  29. savedInstanceState: Bundle?
  30. ): View? = inflater.inflate(R.layout.fmt_person, container, false)
  31.  
  32. override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
  33. super.onViewCreated(view, savedInstanceState)
  34.  
  35. viewModel.onViewCreated()
  36. setupButton()
  37. renderViewState()
  38. }
  39.  
  40. private fun setupButton() {
  41. btnOk.setOnClickListener {
  42. actions.onNext(FindAction(etInput.text.toString().toInt()))
  43. }
  44. }
  45.  
  46. private fun renderViewState() {
  47. viewModel.getViewState().observe(this,
  48. Observer<MviViewState> {
  49. renderIsLoading(it.loading)
  50. renderFirstName(it.firstName)
  51. renderLastName(it.lastName)
  52. })
  53. }
  54.  
  55. private fun renderIsLoading(isLoading: Boolean) {
  56. if (isLoading) {
  57. tvProgress.visibility = View.VISIBLE
  58. } else {
  59. tvProgress.visibility = View.GONE
  60. }
  61. }
  62.  
  63. private fun renderFirstName(firstName: String) {
  64. tvFirstName.text = firstName
  65. }
  66.  
  67. private fun renderLastName(lastName: String) {
  68. tvLastName.text = lastName
  69. }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement