Android/Basic

[Android] Fragment과 Toast message

쏭식 2022. 4. 15. 23:59

Fragment

UI 구성을 모듈 단위로 나누어 독립성을 추가해주고, 한 화면에 있던 UI 들을 조각이라는 단위로 재배치 하는 것

오늘 해볼 실습은 하나의 Activity안에서 Fragment가 어떻게 변환되는지를 파악하는 것이다.

위 그림과 같이 홈프래그먼트에서 앨범프래그먼트로 이동하는 것을 구현해보자.

먼저 프래그먼트 클래스를 만들어보면 액티비티클래스하고 다음과 같은 차이점이 있다.

class HomeFragment : Fragment() 

액티비티는 AppCompatActivity 를 상속받았지만

프래그먼트는 Fragment 를 상속받는다.

Binding을 선언해주는 것에도 차이가 있다.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater) //바인딩 초기화
    setContentView(binding.root)

먼저 액티비티에서는 위와 같이 선언해주지만

lateinit var binding: FragmentHomeBinding

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    binding = FragmentHomeBinding.inflate(inflater, container, false)
    //as mainActivity 홈프래그먼트는 메인엑티비티 안에있는 하나의 조각
    return binding.root
}

프래그먼트에서는 위와 같이 선언해준다. 

먼저 binding : xml뷰의 카멜케이스 로 선언해주는 것은 같지만

프래그먼트는 binding을 초기화 해줄 때 inflate(inflater, container, false)를 하고,

setContentView(binding.root)대신에 binding.root를 반환해준다.

 

바인딩을 초기화 하는 방법을 알아봤으니 이제 프래그먼트 이동을 살펴보자.

홈프래그먼트에서 앨범을 클릭하였을 때 앨범프래그먼트로 이동하는 코드이다.

binding.homeAlbumImgIv1.setOnClickListener {
    (context as MainActivity).supportFragmentManager.beginTransaction()
        .replace(R.id.main_frm , AlbumFragment()) //메인프레임부분을 앨범프래그먼트로 바꾸겠다.
        .commitAllowingStateLoss() //내부적으로 동작하는 부분
}

앨범이미지를 클릭했을 때 실행되는 함수이다.

모든 프래그먼트는 MainActivity에서 실행되고 MainFrame안에서 계속 바뀌는 형태라 as MainActivity를 적어주고

.replace(어디에 속해있는지, 어디로이동할지) 를 적어주었다.

우리는 메인프레임안에 있는 홈프래그먼트를 앨범프래그먼트로 전환해줄 것이기에

main_frm, AlbumFragment를 적어주었다.

 

반대로 앨범프래그먼트에서도 마찬가지로 다음과 같이 적어주어 뒤로가기 버튼을 클릭했을 때 홈프래그먼트로 전환해주었다.

binding.albumBackIv.setOnClickListener {
    (context as MainActivity).supportFragmentManager.beginTransaction()
            .replace(R.id.main_frm, HomeFragment())
            .commitAllowingStateLoss()
}

 

 

Toast Message

토스트메세지는 팝업창과 비슷하게 사용자에게 보여주는 메세지이다.

binding.songLalacLayout.setOnClickListener {
    Toast.makeText(activity, "LILAC", Toast.LENGTH_SHORT).show()
}

 

Toast Message

이렇게 라일락이라는 곡을 클릭하였을 때 LILAC이라는 토스트메세지를 나타낼 수 있다.