열려는 다이얼로그 클래스는 반드시 DialogFragment를 상속해야한다!!
먼저 다이얼로그를 화면가득찬 상태로 만들기 위해 style.xml에 테마를 만든다
styles.xml
<style name="FullDialogTheme" parent="AppTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowIsFloating">false</item>
</style>
DialogClass라는 DialogFragment를 상속하는 클래스를 열때 특정 값을 넘겨줘야하는 경우가 생긴다.
이럴때 DialogClass안에 public으로 변수를 생성한 후에 DialogClass().let안에 [it.변수명 = "test"]와 특정값을 넣어 사용할수있지만 public으로 사용하는것은 효율적이지도 않고 번거롭다.필자는 bundle을 이용해 넘기는법을 몰랐을때 해당 방식을 사용했는데 불편하더라.. 무엇보다 가끔 it.변수명 안에 값이 안들어갈때가 있더라 -> 이건 왜이런지 모르겠다..
이럴때는 bundle을 이용해서 argument를 넘겨준 후에 DialogClass 안에서 넘겨준 인자값을 사용하면된다.
// 전체화면으로 열기
DialogClass().let{
val bundle = Bundle()
bundle.putString("key", "value")
it.arguments = bundle
it.setStyle(DialogFragment.STYLE_NORMAL, R.style.FullDialogTheme)
it.dialog?.window?.setWindowAnimations(android.R.style.Animation_Dialog)
it.showNow(supportFragmentManager,"")
}
Dialog를 전체화면으로 여는게 아니라 frameLayout부분만 변경하도록 할때는 아래 코드를 사용하면된다.
아래 Setting()클래스는 DialogFragment()가 아니라 Fragment()를 상속한다.
binding.bottomNavigationview.setOnItemSelectedListener { item ->
when (item.itemId) {
R.id.setting->{
Setting().let {
val bundle = Bundle()
bundle.putString("key", "값")
it.arguments = bundle
supportFragmentManager.beginTransaction()
.replace(binding.frameLayoutActivityMain.id, it).commit()
}
}
else -> {
supportFragmentManager.beginTransaction()
.replace(binding.frameLayoutActivityMain.id, Setting()).commit()
}
}
true
}
넘겨준 값을 사용할때는 아래와같이 사용하면된다.
arguments?.getString("key")
'프로그래밍 > Android' 카테고리의 다른 글
[Android] 카카오맵 API 'Can`t load DaumMapEngineApi.so file'에러 (0) | 2022.09.18 |
---|---|
[Android] 카카오맵 API 현재위치 구하는 코드 (0) | 2022.09.18 |
[Android] Dialog 뒷 배경 검정색으로 나오지않게하기 (0) | 2022.09.01 |
[Android] ProgressBar 배경색 투명하게 (0) | 2022.09.01 |
[Android] Data Binding (0) | 2022.09.01 |
댓글