개발/Rising Camp Android 4th

[2주차/과제] 생명주기를 활용 + BottomNavigation, Fragment

Eun 2022. 2. 19. 16:19

당근마켓 로그인 화면

(당근마켓은 id,pw를 사용하는 다른 어플들과 달리 휴대폰 번호로 바로 로그인 가능)

  • onCreate() : 당근마켓 휴대폰 번호 sharedpreferences에 저장
  • onStart() : 로그인을 했다면 바로 메인 화면으로 UI 설정
  • onPause() : 앱 최소화하고 다시 들어오면 EditText hint속성을 ‘다시 입력해주세요’ 로 변경
  • onPause(), onResume() : 앱을 최소화하고 다시 들어와도 EditText 유지
    • onResume() : EditText 유지는 원래 있는 기능이라 작성중인 EditText를 초기화해주는 걸로 변경
  • onCreateView : 로그아웃 버튼을 누르면 SharedPreferences에 유저정보 지우고 로그인 화면으로로 이동
    • → HomeFragment위에 로그아웃 버튼을 생성했으나 SharedPreferenes는 시스템 정보 접근이기때문에 액티비티에서 사용하는 것이 권장한다고 함.

➡️ 구현 화면

 

당근마켓 게시글

GoodsWritingActivity.kt

  • onStop(), onDestroy() : 앱을 종료해도 작성중인 글 Edit 텍스트에 저장
    • onDestroy()만 사용해서 작성중인 글 SharedPreferences에 저장
  • onStop, onRestart() : 카테고리를 선택하고 해당 액티비티로 다시 돌아오면 카테고리 반영
    • GoodsWritingActivity에서 카테고리를 선택하기위해서 CategoryActivity로 이동, categoryActivity에서 카테고리를 선택하고 StartActivity()로 GoodsWritingActivity로 이동하면 다액티비티스택에 GoodsWritingActivity가 두번이나 쌓이는 문제점이 발생!
    • --> startForResult(), onActivityResult() 를 써서 해결
  • 암시적 인텐트 사용
    • 갤러리 요청시, 접근 권한을 요청하고 승인하면 갤러리 실행
    • 카메라 요청시, 접근 권한을 요청하고 승인하면 카메라 실행

 

CategoryActivity.kt

  • onStop() : 앱을 최소화하고 다시 들어오면 EditText에 입력한 카테고리 삭제

GoodsWritingActivity.kt(왼), CategoryActivity.kt(오)
onDestroy(왼), 암시적 인텐트 사용(오)

 

 

당근마켓 메인 화면 

  • onRestart() : 앱을 최소화했다가 다시 들어오면 앱 평가 다이얼로그 띄우기

 

BottomNavigation & Fragment

 

개발하면서 해결한 것들

 

  • EditText 밑줄제거
    • android:background="@null"
  • Fragment는 SharedPreferences 사용안됨
    • getSharedPreferences()는 Context의 메소드여서 Context가 없는 Fragment에서는 사용불가능하다. 따라서 액티비티의 정보를 가져와서 사용해야한다.
    • 지금은 어떻게 쓰이는지 알기 위한 테스트코드로 실제 어플을 구현할 때는 액티비티로 접근할 것..
    • 💡 하지만 SharedPreferences는 시스템정보를 접근하는 것이기때문에 보안상 Application Context에서 사용하는 것이 권장된다... !
  • Fragment에서 클릭리스너 생성
    • return binding.root 전에 클릭리스너를 넣어줘야 동작한다.
  • 이미지를 화면에서 보여줄 때 사진의 가운데만 보이게 설정
    • android:scaleType="centerCrop"
  • cardView 그림자 제거
    • app:cardElevation="0dp"
  • bottomNavigationView 두번 클릭해야 넘어가는 오류
    • setOnNavigationItemReselectedListener   setOnItemSelectedListener
    • 단순 오타 오류.. 함수를 잘보고 사용하자.
  • Button 그림자 제거
    • style="@style/Widget.AppCompat.Button.Borderless"
  • scrollView에서 스크롤바 없애기나머지 스크롤뷰는 null로 해주면 됨
    • android:scrollbars="none" → HorizontalScrollView
  • TableLayout에서 비율 꽉차게 일정하게 배치하기
    • android:stretchColumns="*"
  • bottomNavigtionView에서 클릭하면 이미지 바꾸기
  • 당근페이 화면에서 점선으로 버튼 만들기
    <stroke android:width="2dp" android:color="#F75D02" android:dashWidth="7dp" android:dashGap="7dp"/>
    
    • dashwidth, dashGap 사용
  • CustomDialog
  • EditText 밑줄제거
    • android:background="@null"
  • Fragment는 SharedPreferences 사용안됨
    • getSharedPreferences()는 Context의 메소드여서 Context가 없는 Fragment에서는 사용불가능하다. 따라서 액티비티의정보를 가져와서 사용해야한다.