Deperecated/Android_강의

안드로이드 - Activity Controller

누알라리 2020. 2. 19. 16:22
1. Controller

- 웹, 모바일 등 애플리케이션 개발 시 눈에 보이는 화면들을 관리하는 요소를 Controller라고 부른다.

- 만약 눈에 보이는 모든 화면을 Fragment로 만들어 사용할 경우 Fragment를 관리하는 Activity가 Controller의 역할을 한다.

 

2. Activity의 역할

- 각 Fragment를 교환하고 관리하는 역할을 한다.

- Fragment들이 사용할 데이터를 관리하는 역할을 한다.

 

- 각 Fragment들은 배치되어있는 Activity에 접근할 수 있다.

- 애플리케이션 개발 시 눈에 보이는 화면을 Fragment로 사용할 경우 Activity가 Controller의 역할을 하게된다.1

 

3. 예제 - 프래그먼트1에서 버튼을 누르면 프래그먼트2에 데이터를 쏴서 작업하는 문제 

1. Fragment1

- 각 Fragmnet에서 View의 구성요소를 직접 사용할 수 없기 때문에 View에서 사용할 구성요소들의 객체를 만든 후 view를 통해 주소값을 가져와야한다.

- 그 다음, MainActivity 객체(Controller)를 만들어서 프래그먼트2로 보낼 데이터들을 세팅해준다.

 

2. Fragment2

- MainActivity 객체(Controller)를 만들어서 프래그먼트1에서 받아야할 데이터들을 받아 원하는 작업을 처리한다.

class FirstFragment : Fragment() {

    // 3. Fragmnet에서는 view에 배치되어있는걸 그대로 가져올 수 없기 때문에 얻어온 view 객체에서 구성요소의 객체를 생성해야한다.
    var button: Button? = null
    var edit1: EditText? = null
    var edit2: EditText? = null

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        // 3. Fragment가 불리면 자동으로 호출되는 CreateView함수에서 view를 생성해서 vieww를 통해 Fragment Layout에 있는 구성요소들을 가져온다!
        var view = inflater!!.inflate(R.layout.fragment_first, container, false)
        button = view.findViewById<Button>(R.id.button)
        edit1 = view.findViewById<EditText>(R.id.editText)
        edit2 = view.findViewById<EditText>(R.id.editText2)




        // 4. Fragment에선 Activity를 그냥 가져올 수 있음. 버튼을 클릭하면 result fragmnet로 이동하게!
        button?.setOnClickListener {view->

            // 5. 프래그먼트1의 EditText의 내용을 메인액티비티의 객체에 저장해둔다. 프래그먼트2에서 사용할 수 있도록!
            var main_activity = activity as MainActivity // MainActivity로 형변환

            main_activity.value1 = edit1?.text.toString()
            main_activity.value2 = edit2?.text.toString()

            main_activity.setFragment("result")
        }


        return view
    }
}
class SecondFragment : Fragment() {

    var button: Button? = null
    var edit1: TextView? = null
    var edit2: TextView? = null

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {


        var view = inflater!!.inflate(R.layout.fragment_second, container, false)
        button = view.findViewById<Button>(R.id.button2)
        edit1 = view.findViewById<TextView>(R.id.textView)
        edit2 = view.findViewById<TextView>(R.id.textView2)

        var main_activity = activity as MainActivity
        // 6. 메인액티비티에 세팅된 프래그먼트1의 텍스트를 가져옴.
        edit1?.text = main_activity.value1
        edit2?.text = main_activity.value2


        button?.setOnClickListener {view->
            main_activity.supportFragmentManager.popBackStack()
        }


        return view
    }
}
class MainActivity : AppCompatActivity() {

    // 1. 사용할 프래그먼트들의 객체를 생성
    var input_fragment = FirstFragment()
    var result_fragment = SecondFragment()

    // 4. 프래그먼트1의 EditText를 프래그먼트2에 전달할 변수 선언
    var value1:String? = null
    var value2:String? = null

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

        setFragment("input")
    }

    // 2. Activity에 배치할 Fragment 세팅
    fun setFragment(name : String)
    {
        var tran = supportFragmentManager.beginTransaction()
        when(name)
        {
            "input"->
            {
                tran.replace(R.id.container, input_fragment)
            }
            "result"->
            {
                tran.replace(R.id.container, result_fragment)
                tran.addToBackStack(null)
            }
        }

        tran.commit()
    }
}

'Deperecated > Android_강의' 카테고리의 다른 글

안드로이드 - DialogFragment  (0) 2020.02.19
안드로이드 - ListFragment  (0) 2020.02.19
안드로이드 - Fragment  (0) 2020.02.19
안드로이드 - Fragment - IPC  (0) 2020.02.19
안드로이드 - 서비스  (0) 2020.02.19