안드로이드 개발 팁 #17 - 뷰 바인딩 적용된 프래그먼트에 데이터 바인딩 적용 후 빌드시 발생하는 오류

in hive-137029 •  2 years ago 

시작하며...

안드로이드 스튜디오의 프로젝트에서 Tabbed activity를 생성하면, 3개의 프래그먼트들이 자동으로 생성됩니다. 이들은 기본적으로 뷰 바인딩(view binding)이 적용되어 있고요. 이들에 데이터 바인딩을 적용했습니다. 이후 빌드에서 예상치 못한 오류가 발견되었습니다. 내용은 다음과 같습니다.

오류 내용

아래와 같이 특정 리소스 파일 이름이 유효하지 않다고 합니다. 파일 이름이 ic_bottom_menu_profile 3.xml인데요. 제가 추가한 것은 ic_bottom_profile.xml입니다. 뭔가 이상하죠?

Execution failed for task ':dorian-steem-ui:parseDebugLocalResources'.

A failure occurred while executing com.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResourcesRunnable
Failed file name validation for file /Users/dorian-lee/Documents/GitHub/dorian-steem-apps/dorian-steem-apps-v1/dorian-steem-ui/build/intermediates/packaged_res/debug/drawable/ic_bottom_menu_profile 3.xml

해결 방법

혹시나 하는 마음에 아래와 같이 2가지 메뉴들을 실행해 보았습니다. 그 결과, 빌드가 이상없이 잘 작동됨을 확인했습니다.

  • Clean Project 실행
  • Rebuild Project 실행

시작하며...

한 주의 일정을 보여주는 앱을 만든다고 가정해 봅시다. 주간 일정은 테이블로 보여줘야 하는데요. 오늘 또는 특정일이 속하는 주의 모든 날들(7일이죠)을 알아야 합니다. 예를 들어봅시다. 오늘이 8월 6일 토요일이면, 8월 1일 (월)부터 8월 7일 (일)까지가 필요한 거죠. 이것을 코드로 어떻게 구현할 수 있을까요? 그것이 이번 포스트의 주제입니다.


특정일이 속하는 주의 월요일 구하기

LocalDate 클래스를 활용하여 2022년 8월 3일이 속하는 주의 월요일을 구해보겠습니다.

val date = "2022-08-03"
val monday = LocalDate.parse(date).with(DayOfWeek.MONDAY)

특정일의 다음 날, 다다음 날 구하는 방법

위 코드에서 월요일을 구했지요. 그 다음날인 화요일을 구하려면 그것의 plusDays(1)을 호출하면 됩니다. 다다음날인 수요일을 구하려면, 월요일 객체로부터 plusDays(2)을 호출하면 되지요.

val date = "2022-08-03"
val monday = LocalDate.parse(date).with(DayOfWeek.MONDAY)
val tuesday = monday.plusDays(1)
val wednesday = monday.plusDays(2)

특정일이 속하는 주의 모든 일들을 배열로 구하는 함수

위에서 설명드린 내용을 베이스로 특정일이 속하는 주의 모든 일들을 배열로 구하는 함수를 아래와 같이 만들어 보았습니다.

// 특정일이 속하는 주의 모든 일들을 배열로 구한다.
fun getWeekdays(
    date: String    // 특정일 (예: "2022-08-03")
): Array<LocalDate> {
    // 특정일이 속하는 주의 월요일을 구한다.
    val monday = LocalDate.parse(date).with(DayOfWeek.MONDAY)

    // 해당 주의 모든 요일을 구하여 배열에 담는다.
    return arrayOf(
        monday,
        monday.plusDays(1),
        monday.plusDays(2),
        monday.plusDays(3),
        monday.plusDays(4),
        monday.plusDays(5),
        monday.plusDays(6)
    )
}

오늘이 속하는 주의 모든 요일들 구하기

오늘 날짜는 LocalDate.now() 메소드를 호출하여 구할 수 있고요. 그것의 toString() 메소드로 오늘 날짜를 문자열로 읽을 수 있습니다. getWeekdays 함수 호출시 date 파라메터에 LocalDate.now().toString()을 대입하면 됩니다.

fun getCurrentWeekdays(): Array<LocalDate> {
    return getWeekdays(LocalDate.now().toString())
}

지난 안드로이드 개발 팁

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

지난 안드로이드 개발 팁만 복사하려 했는데, 지난 포스트 전체가 복사되었네요. 내일 중으로 수정해야겠습니다.

image.png

Upvoted! Thank you for supporting witness @jswit.
default.jpg

@추천해

감사합니다.


안녕하세요.
이 글은 SteemitKorea팀(@jungjunghoon)님께서 저자이신 @dorian-mobileapp님을 추천하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!