Activity
액티비티는 Application을 구성하는 기본 단위이며 사용자와 상호작용하는 UI를 표시해주는 요소이다.
또한,
앱이 실행될 때 화면에 UI를 표시하고, 사용자의 클릭이나 입력 등의 이벤트를 처리하는 역할을 해준다.
Fragment
UI구성을 모듈 단위(조각)으로 나누어 독립성을 추가해주고,
한 화면에 있던 UI 들을 조각이라는 단위로 재배치하는 것.
Activity와 Fragment 둘 모두 노출되고 클릭되어지기 때문에 사용자와 상호작용하는 공통점이 있다.
오늘은 FLO앱에서 MainActivity에 있는 음악을 누르면 SongActivity로 전환하는 것을 구현해보자.
먼저 액티비티 클래스를 생성해주면 다음과 같이 AppCompatActivity를 상속받아야한다.
class MainActivity : AppCompatActivity()
자바에서는 extends를 통해 상속받았지만 코틀린에서는 : 콜론을 통해 상속받는다.
이렇게 액티비티 클래스를 만들어주면 주의해야할 점이 있다!
manifest.xml파일에 속성을 다음과같이 꼭 추가해주어야한다!!
<activity android:name="com.example.flo.SongActivity"/>
그 다음 xml파일에 있는 액티비티.xml에 접근하기 위해서는 binding을 사용해야한다.
binding이 나오기 전에는 findViewById를 사용해서 xml파일에 접근하였다.
val textView = findViewById<TextView>(R.id.main_player_cl)
textView.text = "dd"
이렇게 해당 뷰의 값을 변경할 수 있다.
하지만!!
여러 개의 뷰들을 만들고 나면 하나하나 연결해주기 위해 많은 변수를 사용할 수 밖에 없었고,
NullPointException오류가 자주 발생하였다.
이러한 문제들을 해결하기 위해 Binding이 등장했다!!
먼저 뷰바인딩을 사용해주기 위해!! build.gradle파일에 다음과 같이 적어주어야한다.
viewBinding {
enabled true
}
그 다음!
다음 코드와 같이 binding을 전역변수로 선언해주고 콜론을 적어준 뒤 xml파일을 카멜케이스로 적어준다.
xml파일을 연결하는 코드이다.
lateinit var binding: ActivityMainBinding
binding = ActivityMainBinding.inflate(layoutInflater) //바인딩 초기화
setContentView(binding.root)
binding.mainPlayerCl.setOnClickListener {
startActivity(Intent(this, SongActivity::class.java))// intent 하나의 액티비티에서 사용되는 택배상자
//this -> song액티비티로 전달.
}
AppCompatActivity클래스를 상속받아 onCreate를 오버라이딩하였다.
onCreate는 액티비티가 실행될 때 처음 실행되는 함수이다.
따라서 onCreate함수 안에 xml의 메모리를 객체화 시켜주는 메소드인 inflate를 실행시켜준 다음 binding에 초기화해준다.
다음 xml파일을 초기화한 binding을 해 xml파일에 있는 모든 것을 마음대로 쓸 수 있게 해주기위해
setContentView와 root(xml파일의 최상단 뷰)를 이용하였다.
binding을 초기화 했으면 위 그림과 같이 binding.(xml파일 접근하고싶은 id).(메소드) 이렇게 접근할 수 있다.
또한 startActivity메소드와 intent를 사용하여 현재 있는 액티비티(this)에서 이동하고 싶은 액티비티 파일을 적어주어
액티비티간의 전환을 구현하였다.
액티비티의 전환뿐만 아니라 위 그림과 같이 이미지변환을 해보자.
binding.songMiniplayerIv.setOnClickListener {
setPlayerStatus(false)
}
binding.songPauseIv.setOnClickListener {
setPlayerStatus(true)
}
fun setPlayerStatus (isPlaying : Boolean){
if(isPlaying){
binding.songMiniplayerIv.visibility = View.VISIBLE
binding.songPauseIv.visibility = View.GONE
} else {
binding.songMiniplayerIv.visibility = View.GONE
binding.songPauseIv.visibility = View.VISIBLE
}
}
binding을 통해 각 버튼에 접근한 뒤,
플레이 버튼을 눌렀을 때에는 플레이어버튼의 View를 GONE상태로 변환해주고,
일시정지 버튼을 눌렀을 때에는 일시정지버튼의 View를 GONE상태로 변환해주었다.
'Android > Basic' 카테고리의 다른 글
[Android] Fragment과 Toast message (0) | 2022.04.15 |
---|---|
[Android] Redeclaration Error (0) | 2022.04.14 |
[Android] ConstraintLayout, Chain 설정 (0) | 2022.04.12 |
[Android] View와 Layout (0) | 2022.04.11 |
[Android] 안드로이드 공부를 시작하며 (0) | 2022.04.10 |