본문 바로가기
안드로이드/Fragment

안드로이드 Activity Controller

by 김어찐 2022. 6. 17.
728x90

Controller

웹, 모바일 등 애플리케이션 개발 시 눈에 보이는 화면들을 관리하는 요소를 Controller 라고 부른다.
만약 눈에 보이는 모든 부분을 Fragment로 만들어 사용할 경우 Fragment를 관리하는 Activity가 Contoller의 역할을 한다.

 

Activity의 역할

각 Fragment를 교환하고 관리하는 역할을 한다.
Fragment들이 사용할 데이터를 관리하는 역할을 한다.

 

 

package com.example.activitycontroller

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    val inputFragment = InputFragment()
    val resultFragment = ResultFragment()

    // fragment들이 사용할 변수
    var value1  = ""
    var value2  = ""

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setFragment("input")
    }

    fun setFragment(name: String) {
        var tran = supportFragmentManager.beginTransaction()

        when (name) {
            "input" -> {
                tran.replace(R.id.container1,inputFragment)
            }
            "result" -> {
                tran.replace(R.id.container1,resultFragment)
                tran.addToBackStack(null)
            }
        }
        tran.commit()
    }
}

main_activity.xml

 

InputFragment

package com.example.activitycontroller

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.fragment_input.*

class InputFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_input,null)
        return view
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        input_button.setOnClickListener {
            val mainActivity = activity as MainActivity
            mainActivity.value1 = input_edit1.text.toString()
            mainActivity.value2 = input_edit2.text.toString()
            mainActivity.setFragment("result")
        }
    }
    override fun onResume() {
        super.onResume()
        input_edit1.setText("")
        input_edit2.setText("")
    }
}

fragment_input.xml

 

 

ResultFragment

package com.example.activitycontroller

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.fragment_input.*
import kotlinx.android.synthetic.main.fragment_result.*

class ResultFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_result,null)
        return view
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val mainActivity = activity as MainActivity
        result_text1.text = mainActivity.value1
        result_text2.text = mainActivity.value2
    }


}

fragment_result.xml

728x90

'안드로이드 > Fragment' 카테고리의 다른 글

안드로이드 DialogFragment  (0) 2022.06.17
안드로이드 ListFragment  (0) 2022.06.17
안드로이드 Fragment 내의 View 제어  (0) 2022.06.17
안드로이드 Fragment 생명주기  (0) 2022.06.17
안드로이드 Fragement  (0) 2022.06.17