스팀 앱 개발기 #75 - 태그 화면의 포스트 항목에 태그/커뮤니티 표시
시작하며...
태그 화면 관련해서 이번에 작업한 것은요. 포스트 항목에서 보여주던 태그를 태그 또는 커뮤니티 이름으로 보여주는 것으로 바꾸는 것입니다.
스크린샷
아래 그림과 같이 커뮤니티에서 작성한 포스트의 경우 태그 대신 커뮤니티 이름을 보여 줍니다. 커뮤니티 이름이 길어서 우측 날짜를 침범하지 않도록 말줄임표도 적용하였습니다. 보이는 시간의 길이도 줄이기 위해 시간 포맷은 "yyyy-MM-dd HH:mm:ss"에서 "yyyy-MM-dd HH:mm"으로 변경하였습니다.
![](https://cdn.steemitimages.com/DQmf63wiXe2QHxvtz4hfeb1Y4Con5V7noWmEwYGaTQAkyex/IMAGE 2022-12-03 23:27:30.jpg)
작업 개요
- layout_post_item.xml 레이아웃 수정
- Converter 클래스의 toLocalTimeFromUTCTime 메소드 수정
- PostItemDTO 데이터 클래스 수정
- 추가로 GetAccountsResponse 데이터 클래스도 수정
layout_post_item.xml 레이아웃 수정
적용한 사항들은 다음과 같습니다.
- 태그/커뮤니티를 보여줄 텍스트
- 길이 변경
- 이전: 텍스트의 길이 (wrap_content)
- 변경: 우측 위치를 시간을 보여주는 텍스트뷰의 좌측 위치로 설정
- 말줄임표 ... 적용
- 길이 변경
Converter 클래스의 toLocalTimeFromUTCTime 메소드 수정
- 파라메터 추가
- timeFormat(String): 시간 포맷
- "yyyy-MM-dd HH:mm:ss"로 설정했던 시간 포맷을 timeFormat 파라메터로 대체
fun toLocalTimeFromUTCTime(utcTime: String, timeFormat: String): String {
if (utcTime.isEmpty()) {
return ""
}
try {
val sdf = SimpleDateFormat(timeFormat)
val date = sdf.parse(utcTime.replace("T", " ").trim())
val longUtcTime = date.getTime()
val offset: Int = TimeZone.getDefault().getOffset(longUtcTime)
val longLocalTime = longUtcTime + offset
val dateLocalTime = Date().apply {
setTime(longLocalTime)
}
return sdf.format(dateLocalTime)
}
catch (e: ParseException) {
e.printStackTrace()
return ""
}
}
PostItemDTO 데이터 클래스 수정
- 커뮤니티에서 쓴 포스트이면, PostItem 객체의 tagOrCommunity 필드를 커뮤니티 이름으로 설정
- Converter.toLocalTimeFromUTCTime 메소드의 변경 파라메터 적용
fun toPostItem(): PostItem {
val thumbnailURL = json_metadata?.getThumbnailURL() ?: ""
val tagOrCommunity = when {
(null == community_title) -> category ?: ""
else -> community_title ?: ""
}
val voteCount = active_votes?.size ?: 0
val upvotes = active_votes?.filter { activeVote -> activeVote.isUpvote() }
val upvoteCount = upvotes?.size ?: 0
val downvoteCount = voteCount - upvoteCount
return PostItem(
title ?: "",
thumbnailURL,
body ?: "",
tagOrCommunity,
Converter.toLocalTimeFromUTCTime(created ?: "", "yyyy-MM-dd HH:mm"),
payout ?: 0f,
upvoteCount,
downvoteCount,
author ?: "",
author_reputation?.toInt() ?: 0,
permlink ?: ""
)
}
추가로 GetAccountsResponse 데이터 클래스도 수정
Converter.toLocalTimeFromUTCTime 메소드 변경으로 인해 이 데이터 클래스도 같이 수정했습니다. 아래 Commit을 통해 코드를 조회할 수 있으므로 여기서는 생략합니다.
GitHub Commit
마치며...
오늘도 조금씩 작업에 성공했습니다. 내일도 조금씩...
지난 스팀 앱 개발기
- #74 - 태그 화면에서 포스트 리스트 추가 로딩시 깜빡임 문제 해결
- #73 - 태그 화면의 포스트 리스트에 무한 스크롤 적용
- #72 - 태그 화면의 포스트 리스트에서 항목들 사이 분리선 보이기
- #71 - 태그 화면에서 포스트 항목들의 썸네일 로딩
- #70 - 태그 화면 1차 구현
- #69 - 태그 화면에 데이터 바인딩 적용
- #68 - 태그 화면(TagsFragment) 구성
- #67 - TagsViewModel 클래스에 포스트 리스트 구하는 메소드 그리고 라이브 데이터 추가
- #66 - bridge.get_ranked_posts API 연동 구현: ReadRankedPostsUseCase 클래스 추가
- #65 - bridge.get_ranked_posts API 연동 구현: SteemRepository 인터페이스, SteemRepositoryImpl 클래스 수정
- #64 - bridge.get_ranked_posts API 연동 구현: SteemService 인터페이스에 메소드 추가
- #63 - bridge.get_ranked_posts API 관련 데이터 클래스 추가 수정
- #62 - bridge.get_ranked_posts API의 응답 자료를 맡을 데이터 클래스 수정
- #61 - layout_post_item.xml 수정 후 예상치 못한 빌드 오류
- #60 - bridge.get_ranked_posts API의 응답 자료를 맡을 데이터 클래스 정의
- #59 - 태그별 포스트 리스트를 구하기 위한 bridge.get_ranked_posts API
- #58 - 포스트 리스트를 구성할 항목의 레이아웃 (3) 데이터 클래스 정의 및 데이터 바인딩 적용
- #57 - 포스트 리스트를 구성할 항목의 레이아웃 (2)
- #56 - 포스트 리스트를 구성할 항목의 레이아웃
- #55 - .gitignore 파일 작성
- #54 - RxJava 관련 메모리 누수 방지 코드 작성
- #53 - 버그 수정: 인터넷 미연결시 API 실행하면 앱 강제 종료
- #52 - 인터넷 미연결시 API 실행하면 어떻게 될까?
- #51 - 파워다운 끝났으나 SP to power down 값이 0이 아닌 버그
- #1 ~ #50
Posted through the AVLE Dapp (https://avle.io)
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
정말 멋집니다.