📱 Android View 및 Adapter 관련 정리
📏 View 크기 단위
sp: 디바이스 글자 크기 설정 변경에 대응 가능 (사용자 접근성 고려)
🎨 어노테이션
@drawable: 해당 변수/파라미터에 다른 타입이 들어오는 것을 방지
🧠 Adapter 관련
getItemId는 왜 Long을 반환할까?
- Int보다 더 넓은 범위를 표현할 수 있음 → 대규모 데이터셋 대비
getView() 메서드 구현
override fun getView(
position: Int,
convertView: View?,
parent: ViewGroup?,
): View {
val view = convertView ?: LayoutInflater
.from(parent?.context)
.inflate(R.layout.item_movie, parent, false)
return view
}
- false인 이유?
→ attachToRoot = false: 레이아웃을 바로 부모 뷰에 붙이지 않고 반환만 함
- 왜 parent의 context를 가져오는가?
→ parent는 ListView나 RecyclerView. 이 context를 통해 스타일 등 상속 가능
🔍 View 찾기 - 타입 추론
val imageView: ImageView = view.findViewById(R.id.poster)
val imageView = view.findViewById<ImageView>(R.id.poster)
- 두 방식 모두 동일한 결과 (타입 추론 여부만 차이)
- 성능 차이는 없음
- 제네릭은 런타임 시 타입 소거됨 → 타입 추론은 컴파일 타임에 이뤄짐
🖱️ 리스트 아이템 클릭 처리
listView.setOnItemClickListener { _, _, position, _ ->
// ...
}
void onItemClick(AdapterView<?> parent, View view, int position, long id);
- parent: 이벤트가 발생한 ListView or RecyclerView
📦 Intent가 null일 경우
- 원래는 null이 될 일이 없어야 함
- 만약 null이라면?
- 오류 안내 후 이전 화면으로 보내기
- 또는 기본값 처리 / 로딩 상태 (뱅글뱅글) 도 고려 가능
📦 Parcelable
🔄 회전 시 상태 복원
- onRestoreInstanceState(Bundle savedInstanceState) 사용 시
→ 저장된 상태가 있을 때만 호출되므로 null 체크 불필요
- 회전 테스트 방법:
activity.requestOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
🔧 Android Studio Tools
- Tools → Profiler → View Live Telemetry
→ 실시간 View 상태 확인 가능
⚡ View 재사용 & 최적화
ConvertView
ViewHolder 패턴
🎬 도메인 설계 고민
data class Movie(
val posterResId: Int,
val title: String,
val screeningPeriod: ScreeningPeriod,
val runningTime: Int,
) : Serializable
- 이미지 URI를 받게 될 경우:
- 도메인 레이어에서 이미지 경로를 다루는 것이 적절한가?
- 해결 방향:
- 원시값 포장
- 도메인과 분리된 UI 전용 모델 사용
📱 Android View 및 Adapter 관련 정리
📏 View 크기 단위
sp: 디바이스 글자 크기 설정 변경에 대응 가능 (사용자 접근성 고려)
🎨 어노테이션
@drawable: 해당 변수/파라미터에 다른 타입이 들어오는 것을 방지
🧠 Adapter 관련
getItemId는 왜 Long을 반환할까?
getView() 메서드 구현
→ attachToRoot = false: 레이아웃을 바로 부모 뷰에 붙이지 않고 반환만 함
→ parent는 ListView나 RecyclerView. 이 context를 통해 스타일 등 상속 가능
🔍 View 찾기 - 타입 추론
🖱️ 리스트 아이템 클릭 처리
void onItemClick(AdapterView<?> parent, View view, int position, long id);📦 Intent가 null일 경우
📦 Parcelable
🔄 회전 시 상태 복원
→ 저장된 상태가 있을 때만 호출되므로 null 체크 불필요
activity.requestOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE🔧 Android Studio Tools
→ 실시간 View 상태 확인 가능
⚡ View 재사용 & 최적화
ConvertView
ViewHolder 패턴
🎬 도메인 설계 고민