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 |