Apple is Apple

일일 회고

 

벌써 목요일이다. 알고리즘 풀고 과제하고 내용 정리하고 하나하나씩 하다 보면 시간이 훌쩍 지나가있다.

 

과제는 선택사항까지 완료하였다. 디자인만 좀 더 신경써보면 될 것 같다.

 

내일은 금요일이고 그 다음날은 주말이니 조금 더 힘내서 달려보자


오늘의 키워드

  • 과제 톺아보기

lv1

로그인 화면 구성 및 관련 코드 작성

 

xml - 

EditText와 Button등의 위젯들을 통해서 로그인화면을 구성하였다.

Layout은 Constraint layout으로 각 위젯 간 constraint를 설정하여 정렬하였다.

 

code -

각 위젯들은 액티비티 내부에서 전역적으로 사용하기 위해 전역변수로 두고 지연초기화를 시켜주었다.

private val editTextId by lazy { findViewById<EditText>(R.id.editTextId) }

그리고 Button은 setOnClickListener를 통해, EditText는 doOnTextChanged를 통해 이벤트를 걸어주었다.

 

lv2

회원가입 화면 구성 및 관련 코드 작성

 

LV1과 같은 화면, 코드 모두 비슷한 로직으로 작성하였다.

 

lv3

자기소개 화면 구성 및 관련 코드 작성

 

화면은 따로 입력받는 위젯없이 보여주는 위젯만 있기 때문에, ImageView와 TextView를 배치하였다.

 

나타내야 하는 것 중에서 아이디가 있는데 이것은 로그인 화면에서 데이터를 받아와야 하는 것이라

로그인 화면에서 자기소개 화면으로 넘어갈때 putExtra를 통해 데이터를 넘겨주는 작업을 하고, 자기소개 화면에서 getExtra를 통해 받은 후, TextView에 바인딩시켰다.

 

선택과제 1, 2

1. 액티비티끼리 데이터를 주고받을 때 쓰는 registerForActivityResult를 사용해 해결하였다.

기존에 startActivityForResult()라는 메서드가 있었는데, 이 메서드는 deprecated 되었다. (액티비티 이동 간 데이터 소실 문제 때문인 것으로 알고 있다.) 그래서 registerForActivityResult(ActivityContracts.StartActivityForResult()) {... }를 사용하면 startActivityForResult()와 동일한 기능을 수행할 수 있다.

더보기
// 데이터 받는 쪽
private val activityLauncher =
	registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
    	if(it.resultCode == Activity.RESULT_OK) {
        	val id = it.data?.getStringExtra("ID")
        	val pwd = it.data?.getStringExtra("PWD")
        	editTextId.setText(id)
        	editTextPwd.setText(pwd)
     }
}
        
btnSignIn.setOnClickListener {
    activityLauncher.launch(Intent(this, SignUpActivity::class.java))
}


// 데이터 주는 쪽
val intent = Intent(this, SignInActivity::class.java).apply {
       putExtra("ID", id)
       putExtra("PWD",pwd)
}
setResult(RESULT_OK, intent)

 

2. 자기소개 페이지의 ImageView에 랜덤으로 이미지를 보여주게 하는 것이다.

먼저 Drawable resource에 png파일 5개를 넣고, 코드상에서 Drawable list를 만들어 주었다.

그리고 0~4 index를 랜덤값으로 만들어 무작위로 ImageView에 바인딩시켰다.

더보기
val imgList = listOf(
        R.drawable.rtan1,
        R.drawable.rtan2,
        R.drawable.rtan3,
        R.drawable.rtan4,
        R.drawable.rtan5,
)
val randomInt = Random.nextInt(5)

imageView.setImageResource(imgList[randomInt])

 

 

 

추가로 해보기

원래 로그인, 회원가입은 데이터베이스에 정보를 저장해 가지고 사용자 정보를 관리하는데 아직은 그 단계는 아니기 때문에 아이디와 비밀번호를 가진 User클래스를 만들어 일회성으로 데이터를 저장할 수 있도록 재구성해보았다.

btnSignIn.setOnClickListener {
            if(::name.isInitialized.not() || ::id.isInitialized.not() || ::pwd.isInitialized.not()) {
                toast("입력되지 않은 정보가 있습니다.")
                return@setOnClickListener
            }
            if(list.count{ it.id == id } >= 1) {
                toast("중복된 아이디가 있습니다.")
                return@setOnClickListener
            }
            val intent = Intent(this, SignInActivity::class.java).apply {
                putExtra("ID", id)
                putExtra("PWD",pwd)
            }
            list.add(User(id, pwd))
            setResult(RESULT_OK, intent)
            finish()
        }
 
 companion object {
        val list = mutableListOf<User>()
 }

 

간단하게 해 보았는데, 전역적으로 User를 담는 리스트를 두고 회원가입을 할 때마다 사용자가 입력한 id와 리스트 내의 id를 확인하면서 1개라도 있으면 바로 return을 시켜 넘어가지 않도록 하고 토스트 메시지를 띄웠다.

 

 

 

깃헙: https://github.com/Kim-Min-Jong/nbcamp_android_basic

profile

Apple is Apple

@mjjjjjj