Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

경북대 Android_안유인_1주차 과제 #17

Open
wants to merge 29 commits into
base: anyooin
Choose a base branch
from

Conversation

anyooin
Copy link

@anyooin anyooin commented Jun 28, 2024

1단계까지의 커밋 링크입니다!

https://github.com/kakao-tech-campus-2nd-step2/android-contacts/pull/17/files/13345f0ecb98f368b90cd3a380e860eca200720a

코드 작성하면서 어려웠던 점

  • recyclerView에서 Listener를 다는 부분에서 고민을 많이 했던 것 같습니다.
    intent를 넘겨주는 부분이었기 때문에, onCreate부분에 코드가 있어야 하는데,
    이때 listener의 위치와 구현을 어떻게 할지 많이 찾아보고 고민했습니다.

  • 정보들을 객체로 만들어 두긴 했는데, 이렇게 만든 객체들을 intent로 전달하면 코드가 더욱 깔끔해지지는 않을까 생각이 듭니다. 현재는 putExtra와 getExtra가 많이 있어서 가독성이 떨어지는 것 같습니다.

  • 아무것도 입력하지 않고 저장버튼을 클릭하였을때, 해당 edittext로 focus를 이동시키도록 했었는데, 그에 맞게 키보드가 올라오지 않아서 당황하였습니다. 단순히 포커스만 주는 것이아니라 키보드를 올려주는 코드를 추가해 주어야 한다는 것을 알게 되었습니다.

멘토 님이 중점적으로 리뷰해줬으면 하는 부분

  • 처음에 코드를 작성하기 전, 구현할 기능들에 대해 readme에 작성하였는데,
    코드를 작성하다보니 더욱 나눌 수 있는 부분이 생겨 readme를 자주 수정하였습니다.
    매번 과제를 제출할 때 기능단위(commit 단위)를 더 줄일수 있을 것 같다는 피드백을 받았었는데,
    이번 과제에서는 어떠한지 궁금합니다.

  • recyclerView에서 Listener 부분에서 보완해야할 점이 있다면 무엇인지 궁금합니다.

  • 액티비티들이 쌓이도록 하지 않기 위해, flag를 주었습니다.
    처음에는, 굳이 쌓일 필요 없는 연락처 작성 페이지(ContactWritingActivity)에 noHistory를 주어 스택에 남지 않도록 하고, 연락처 메인 페이지(ContactMainActivity)에 singleTop을 주어서 메인페이지 하나만 뜨도록 하려했습니다.
    main -> writing -> main 으로 이동하는 것인데, writing은 스택에 남지 않으니,
    스택상태는 main -> main 이여서 처음의 main을 재사용할 것이라 생각했습니다.
    하지만 원하는대로 작동되지않고, 액티비티가 스택에 쌓이는 모습을 보였습니다.
    그래서 검색을 통해 FLAG_ACTIVITY_CLEAR_TOP 을 사용했더니 원하는대로 작동하였습니다.
    왜 처음에 작성한대로 진행하면 스택에 쌓이는지 궁금합니다. 또, 어떤 flag를 사용하는 것이 좋은 방법인지도 궁금합니다.

실행화면

1
2

@anyooin anyooin changed the base branch from main to anyooin June 28, 2024 08:23
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.floatingactionbutton.FloatingActionButton

val contactList = mutableListOf<Contact>()
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

class의 바깥에 선언한 이유가 있나요?
이 변수는 Activity 안쪽으로 들어오는게 맞는거같습니다.

이렇게 구성했을때 contactList가 디바이스의 메모리에 언제 생성되고 언제 사라지게되는지 한번 알아보면 좋겠습니다.

}
}

class Contact(
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

별도의 파일로 빼주는게 좋다고 생각합니다.
model이라는 패키지(폴더)를 파고 거기에 넣는게 어떨까요?

Comment on lines +115 to +119
val phone: String,
val mail: String,
val birthday: String,
val gender: String,
val memo: String
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기에 있는 값이 nullable이 되어야할 필드들은 없을까요?

moreInfo.visibility = View.INVISIBLE

save.setOnClickListener {
if (name.text.isEmpty()) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 리스너 안쪽 로직은 별도의 메소드를 빼는것도 좋아보이네요.

}
}

fun checkWriting(
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

private으로 바깥에서 접근이 안되어도 괜찮은 메소드 아닐까요?

Comment on lines +140 to +141
name: EditText, phone: EditText, mail: EditText, birthday: TextView,
gender: RadioGroup, memo: EditText
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

각 뷰를 넘기기보다는, 각 뷰의 데이터만을 넘겨도 될거같네요.

@@ -0,0 +1,208 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 레이아웃의 depth가 좀 길어보이는데요. ConstraintLayout을 활용하는게 어떨까요?

Comment on lines +121 to +123
val intent = Intent(this, ContactMainActivity::class.java)
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이렇게 Main으로 이동하는게 아닌 finish()를 써서 이 페이지 스택을 빼면 됩니다.
그러면 다시 아래의 스택 아이템인 Main으로 내려갈거에요.
이게 질문주신 내용의 솔루션입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants