Skip to content

BE SOPT SECOND ASSIGNMENT

jooyae edited this page May 15, 2021 · 1 revision

✔️SECOND ASSIGNMENT

스크린샷 2021-04-26 오후 2 06 43

✔️OPEN SOURCE LIBRARY

라이브러리 목적
Retrofit2 Github Retrofit2 통신
Gson 서버에서 받아온 Json 객체를 Gson으로 변환
OkHttp3 Util 기능 제작에 활용
Lottie 로그인, 회원가입 페이지 Lottie Animation 사용
Glide URL 형식의 이미지
RxJava Observer Pattern 사용
RxKotlin Observable Method 활용
LiveData LifeCycleOwner 관찰자 등록
Dagger2 의존성 주입

🌱 기본 과제

✔️ 2주차 개념 정리

💡 FRAGMENT는 UI를 개별적으로 분할할 수 있도록 하여 Activity UI에 모듈성과 재사용성을 높여준다는 사실 ! 앞으로 Activity보다 Fragment 를 더 활용해봐야겠다. 프래그먼트의 생명주기는 액티비티와 달라서 (1) onCreateView() 에서는 뷰와 관련된 초기화들이 이루어지고 (2) onViewCreated() 에서는 프래그먼트가 액티비티에 접근할 수 있게 해준다!

💡 LIST 를 띄워주기 위해서는, Recyclerview를 사용한다. 나는 Recyclerview 공포증이 있었는데 ,, 나에겐 너무 어려웠던... 하지만 이번 세미나를 다시 들으면서 하나하나 다시 정리하고 복습하니까 이제 무섭지 않은 리사이클러뷰 ➰ 다른 예제들도 보면서 더 연습해봐야겠다 ! Recyclerview 작업 순서는 다음과 같다.

스크린샷 2021-04-26 오후 2 44 51

💡 Adapter데이터를 뷰로 변환하는 다양한 상호작용 방법을 정의하는 장치, Viewholder뷰의 구성요소를 홀드해주는 역할! Recyclerview를 활용하는 작업이 앞으로도 많을텐데 이번 세미나에서 정확히 알고 넘어갈 수 있었던 기회였던 것 같아 좋았다 !!! 📚

🐣 안린이 탈출하기

  1. 1주차 과제 HomeActivity에 Recyclerview 추가해주기
  2. 레포지토리 이름과 설명이 긴 경우, ellipSize 와 maxLine 을 이용해 ... 처리해주기
  3. more 버튼을 추가해서 Fragment를 가진 Activity 띄워주기

📮 저는 처음에 HomeActivity 하단에 리사이클러뷰를 넣어서 과제 예시 화면과 같이 구성을 했으나, 깃허브 레포를 레트로핏을 활용하여 해보고 싶어서 Github API 를 받아와서 사용자를 검색했을 때, 사용자의 레포 이름과 설명 언어를 받아오는 식으로 구현을 해봤습니다. 그래서 과제 예시 화면과 조금 다르게 HomeActivity 상단 툴바에 버튼을 추가하여 다음 화면처럼 구성을 해보았습니다.

🐥 안청년 탈출하기

  1. GridLayoutManager 사용해보기

1️⃣ 홈화면에서 다음 화면으로 이동을 했을 때, LinearLayout 버튼과 GridLayout 버튼을 눌렀을 때 각각 다음 화면처럼 레이아웃이 바뀌는 것을 볼 수 있습니다.

2️⃣ 검색할 수 있는 기능을 추가하여 깃허브 사용자 아이디를 검색하면 해당 유저의 레포 정보들이 다음과 같이 뜨는 것을 볼 수 있습니다.

3️⃣ 아이템을 눌렀을 때, 해당 유저의 레포로 이동하는 기능도 추가하였습니다.

  1. 여러 뷰홀더를 만들어서 Recyclerview안에 2가지 뷰 보여주기 레이아웃만 변경하는게 아니라 아이템 레이아웃을 2개 만들어줘서 뷰홀더안에 2가지 뷰를 보여주는 식으로 구성을 해봤습니다.

  2. RecyclerView Item 에 기능 추가하기

1️⃣ item 길게 눌러서 위치를 변경하기

2️⃣ item 옆으로 swipe해서 delete 하기

3️⃣ 버튼 추가해서 linear -> grid 로 바꿔보기

4️⃣ 버튼 눌렀을 때 효과 넣어주기

5️⃣ Item Decoration

🌻 나도 안드 고수를 향해서 !!!

이 부분은 코드에 한번 적용해보았습니다! 패키지 확인

  1. 객체지향 한 걸음 더 -> BindingAdapter, UiState
스크린샷 2021-04-27 오후 2 33 40
  1. notifyDataSetChanged -> diffUtil 사용

       class FollowingListAdapter(val listener: OnItemClickListener) : 				RecyclerView.Adapter<FollowingListAdapter.FollowingUserViewHolder>() {  
      val diffCallback = object : 		DiffUtil.ItemCallback<RepositoryResponseModelItem>(){  
      override fun areItemsTheSame(  
      oldItem: RepositoryResponseModelItem,  
      newItem: RepositoryResponseModelItem  
      ): Boolean {  
      return oldItem.hashCode() == newItem.hashCode()  
    	 }  
    	  override fun areContentsTheSame(  
      oldItem: RepositoryResponseModelItem,  
      newItem: RepositoryResponseModelItem  
      ): Boolean {  
      return oldItem == newItem  
      }  
     }  
      interface OnItemClickListener{  
      fun itemClickListener(view: View, position: Int)  
     }  
      val differ = AsyncListDiffer(this, diffCallback)  
    
      fun submitList(list : List<RepositoryResponseModelItem>) = 		differ.submitList(list)
    

🎬 Record