2022. 9. 20. 17:44ㆍAndroid
1편에서는 간단히 로컬에서 데이터를 직접 추가해 데이터를 출력하였다
2편에서는 로컬 데이터가 아닌 Retrofit2를 이용한 데이터 호출을 이용해 RecyclerView를 생성해 볼 것이다.
참고 ) 시작 전 기본적으로 retrofit2을 사용할 줄 알아야 쉽게 이해할 수 있다. 필수는 아님 !!
현재 가져온 코드는 페이지에 표시되는 랭킹 시스템을 위해 만들어진 코드이다
레트로핏 부분은 다 제외하고 DataList와 그 아래 RankRecyclerView만 확인하면 된다
result?.GetlLankplace(MySharedPreferences.getUserKey(mainActivity))?.enqueue(object : Callback<GuestRankDTO> {
override fun onResponse(call: Call<GuestRankDTO>, response: Response<GuestRankDTO>) {
if(response.isSuccessful){
val Response : GuestRankDTO? = response.body()
val DataList = Response?.result
if(DataList?.size != 0){
RankRecyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
RankRecyclerView.adapter = DataList?.let { LankAdapter(it) }
}
} else{
Log.d("response", "실패")
}
}
override fun onFailure(call: Call<GuestRankDTO>, t: Throwable) {
Log.d("GetLankPlace", "응답 에러" + t.message.toString())
}
})
1편에서와는 달리 DataList에 외부에서 가져온 결괏값을 넣어준다.
그리고 넣어준 데이터가 존재하는지 확인하고 RecyclerView.layoutManager를 실행한다
RankAdapter
class RankHolder(v : View) : RecyclerView.ViewHolder(v){
var ranktext : TextView = v.findViewById(R.id.lankText)
}
class RankAdapter(val DataList: ArrayList<Responeresult>) : RecyclerView.Adapter<RankHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RankHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.lank_item_recycler, parent, false)
return RankHolder(itemView)
}
override fun onBindViewHolder(holder: RankHolder, position: Int) {
holder.ranktext.text = "${position + 1}." +" "+ DataList[position].place
if(position == 0){
holder.ranktext.setTextColor(ContextCompat.getColor(holder.ranktext.context, R.color.rank1))
holder.ranktext.setTypeface(null, Typeface.BOLD)
} else if (position == 1){
holder.ranktext.setTextColor(ContextCompat.getColor(holder.ranktext.context, R.color.rank2))
holder.ranktext.setTypeface(null, Typeface.BOLD)
} else if (position == 2){
holder.ranktext.setTextColor(ContextCompat.getColor(holder.ranktext.context, R.color.rank3))
holder.ranktext.setTypeface(null, Typeface.BOLD)
}
holder.itemView.setOnClickListener {
val gp_key = DataList[position].gp_key
val intent = Intent(holder.itemView.context, ImageClick_Actitivty::class.java)
intent.putExtra("rank_data", gp_key)
startActivity(holder.itemView.context, intent, null)
}
}
override fun getItemCount(): Int {
if(DataList.size < 5){
return DataList.size
} else{
return 5;
}
}
}
RankHolder, onCreateViewHolder는 1편과 똑같다 때문에 코드와 xml은 생략
onBindViewHolder에서는 앞에서 호출한 데이터를 holder로 데이터를 position 별로 넣어준다.
위에서는 그러데이션을 주기 위해 DataList를 1 ~ 3까지 색깔 효과를 준다 나머지는 4부터는 순서대로 정렬 처리를 해준다
position은 호출된 정보를 0~n까지 넣어준다 또한 앞에서와는 다르게 itemView 자체에 onClickListner와 같은 이벤트를 넣어줘 클릭했을 때 발생하는 Action을 지정해준다
1편에서 말했듯이 getItemCount는 데이터 숫자를 리턴해 주는데 랭킹 시스템 특성상 모든 데이터를 RecycerView 넣어주는 것이 아니라 특정 범위만을 출력해줘야 되므로 범위를 지정해 주었다 ( 데이터 사이즈가 5 이하면 그대로 출력 이상이면 5개만 출력 1~5위까지 있는 Rank )
'Android' 카테고리의 다른 글
[안드로이드 - 코틀린] retrofit2 사용하기 (0) | 2022.11.21 |
---|---|
[안드로이드 - 코틀린] 안드로이드 socket 통신 - (임계치 측정 어플리케이션) (0) | 2022.11.21 |
[안드로이드 - 코틀린] Recyclerview를 이용해 itemView, adapter 이용하기 1 (0) | 2022.09.20 |
[안드로이드 - 코틀린] TabLayout & ViewPager & Fragment 활용하기 (0) | 2022.06.23 |
[안드로이드 - 코틀린] Kakao API Login (0) | 2022.06.21 |