5.5 KiB
5.5 KiB
크리에이터 커뮤니티 전체보기 그리드/리스트 전환 구현
구현 체크리스트
- Toolbar 하단에 좌/우 2탭(왼쪽 List, 오른쪽 Grid) 가로 꽉찬 UI 추가
- 탭 아이콘 선택/비선택 상태(
ic_community_list*,ic_community_grid*) 반영 - 기본 초기 화면을 List 모드로 표시
- Grid 아이템 클릭 시 List 모드로 전환하고 클릭 아이템을 리스트 상단에 표시
- Grid 클릭으로 진입한 List 상태에서 뒤로가기 시 Grid로 복귀
- 초기 기본 List 상태에서 뒤로가기 시 Activity 기본 종료 동작 수행
- Grid 셀 규칙 적용 (이미지 우선, 이미지 없음 시 텍스트 일부, 유료 미구매 시 자물쇠 이미지)
- Grid 레이아웃 한 줄 3개 고정(
GridLayoutManagerspan 3) - List/Grid 전환 버벅임 완화를 위해 데이터 재로딩 없이 화면 전환 비용 최소화
- 탭 배경/하단 라인/선택 인디케이터 디테일 적용
검증 기록
- 무엇/왜/어떻게:
CreatorCommunityAllActivity에 Grid/List 모드 전환 상태(isListMode)를 추가하고, 초기 Grid 표시 -> 아이템 클릭 시 List 전환 -> List 뒤로가기 시 Grid 복귀 흐름을 구현했다. List 스크롤 시 첫 가시 아이템을 앵커로 저장해 Grid 복귀 시 해당 아이템이 보이도록 처리했다. - 무엇/왜/어떻게: Grid 전용
CreatorCommunityAllGridAdapter와item_creator_community_all_grid.xml을 추가했다. 규칙은price > 0 && !existOrdered면ic_lock_bb잠금 아이콘, 이미지 URL이 있으면 이미지, 없으면 본문 텍스트 일부(24자) 표시로 분기했다. - 무엇/왜/어떻게: 사용자 추가 요청("그리드 리스트 한 줄에 3개 표시")을 반영해
GridLayoutManager(applicationContext, 3)로 고정했다. - 무엇/왜/어떻게:
activity_creator_community_all.xml의 RecyclerView 높이를0dp + weight 1로 조정해 Grid/List 모두 화면 높이를 점유하며 스크롤 동작이 안정적으로 유지되도록 보강했다. - 실행 명령:
./gradlew :app:testDebugUnitTest :app:assembleDebug - 결과: BUILD SUCCESSFUL
- 실행 명령:
./gradlew :app:testDebugUnitTest :app:assembleDebug(최종 수정 후 재검증) - 결과: BUILD SUCCESSFUL
- 진단:
.kt,.xml확장자에 대한 LSP 서버가 현재 환경에 미구성되어lsp_diagnostics는 실행 불가(도구 오류 메시지 확인). - 무엇/왜/어떻게:
switchToGridMode()에서mediaPlayerManager.pauseContent()호출 전에::mediaPlayerManager.isInitialized가드를 추가해lateinit property mediaPlayerManager has not been initialized크래시를 방지했다. - 실행 명령:
./gradlew :app:testDebugUnitTest :app:assembleDebug - 결과: BUILD SUCCESSFUL
- 무엇/왜/어떻게: Grid 아이템 클릭 직후
onScrolled초기 이벤트가 앵커를 0으로 덮어쓰던 문제를 막기 위해,switchToListMode()에서 클릭 위치를requestedPosition으로 고정해 해당 위치로 스크롤하도록 수정했다. - 실행 명령:
./gradlew :app:testDebugUnitTest :app:assembleDebug - 결과: BUILD SUCCESSFUL
- 무엇/왜/어떻게: Grid 셀 자물쇠 아이콘(
iv_grid_lock)의 크기를 요청사항에 맞춰24dp x 24dp로 조정했다. - 실행 명령:
./gradlew :app:testDebugUnitTest :app:assembleDebug - 결과: BUILD SUCCESSFUL
- 진단:
.xml확장자 LSP 서버가 현재 환경에 없어lsp_diagnostics는 실행 불가(도구 오류 메시지 확인). - 무엇/왜/어떻게:
activity_creator_community_all.xml에 툴바 하단 2탭(좌 List/우 Grid)을 추가하고 각 탭 아이콘을 선택/비선택 리소스로 토글하도록 반영했다. - 무엇/왜/어떻게:
CreatorCommunityAllActivity의 초기 진입 모드를 List로 변경하고, Grid 아이템 클릭으로 List에 들어온 경우에만 뒤로가기를 Grid 복귀로 처리하도록isListEnteredFromGridClick분기 로직을 추가했다. - 실행 명령:
./gradlew :app:testDebugUnitTest :app:assembleDebug - 결과: BUILD SUCCESSFUL
- 진단:
.kt,.xml확장자 LSP 서버가 현재 환경에 미구성되어lsp_diagnostics는 실행 불가(도구 오류 메시지 확인). - 무엇/왜/어떻게: 전환 버벅임 완화를 위해
RecyclerView를 List/Grid 각각 유지하는 구조로 변경하고, 전환 시LayoutManager/Adapter재할당 대신visibility만 전환하도록 수정했다. 데이터는 기존처럼listAdapter/gridAdapter에 동일 소스를 공유해 재요청 없이 유지된다. - 무엇/왜/어떻게:
activity_creator_community_all.xml을FrameLayout + rv_creator_community + rv_creator_community_grid구조로 바꾸고,setupRecyclerViews()에서 두 RecyclerView를 초기 1회만 구성해 전환 비용을 줄였다. - 실행 명령:
./gradlew :app:testDebugUnitTest :app:assembleDebug - 결과: BUILD SUCCESSFUL
- 진단:
.kt,.xml확장자 LSP 서버 미구성으로lsp_diagnostics실행 불가(도구 오류 메시지 확인). - 무엇/왜/어떻게: 탭 영역 배경을
#777777로 변경하고 탭 하단 전체 라인(1dp,#909090)을 추가했다. 선택 탭 하단에는 인디케이터(2dp,#FFFFFF)가 표시되도록v_tab_list_indicator,v_tab_grid_indicator를 레이아웃과updateTabUi()에 연결했다. - 실행 명령:
./gradlew :app:testDebugUnitTest :app:assembleDebug - 결과: BUILD SUCCESSFUL
- 진단:
.kt,.xml확장자 LSP 서버 미구성으로lsp_diagnostics실행 불가(도구 오류 메시지 확인).