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

안드로이드 Fragment 내의 View 제어

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

onCreateView 메서드에서 생성한 View 객체를 통해 내부의 View 주소 값을 얻어올 수 있다.
이 때 findViewById 메서드를 사용한다

 

Activity 에서 View에 접근 할 때는 findViewById 가 아닌 자동으로 생성된 변수를 통해 접근하였다.
Fragment 는 onCreateView 메서드에서 사용하면 오류가 발생하며 그 이후에 호출되는 메서드에서 처리해줘야 한다.

 

Fragment에서 Activity 접근하기

Activity 프로퍼티를 사용하면 Fragment를 소유하고 있는 Activity에 접근이 가능하다.

 

 

package com.example.fragmentview

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

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

        val frag = SubFragment()
        val tran = supportFragmentManager.beginTransaction()
        tran.replace(R.id.container1,frag)
        tran.commit()
    }
}

 

main_activity.xml

 

SubFragment

package com.example.fragmentview

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.fragment_sub.*

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

//        val text1 = view.findViewById<TextView>(R.id.frag_text1)
//        val btn1 = view.findViewById<Button>(R.id.frag_btn1)
//
//        btn1.setOnClickListener {
//            text1.text = "Fragment 문자열"
//        }

        return view

    }

    // Fragment가 관리하는 View 내부의 View 주소값들이 셋팅된 후
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        frag_btn1.setOnClickListener {
            frag_text1.text = "Fragement 문자열열"
        }

        frag_btn2.setOnClickListener {
            // MainActivity를 추출한다
            val parent = activity as MainActivity
            parent.activity_text1.text = "Acitivty 문자열"
        }
    }
}

 

fragment_sub.xml

728x90

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

안드로이드 DialogFragment  (0) 2022.06.17
안드로이드 ListFragment  (0) 2022.06.17
안드로이드 Activity Controller  (0) 2022.06.17
안드로이드 Fragment 생명주기  (0) 2022.06.17
안드로이드 Fragement  (0) 2022.06.17