인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

푸에님의 프로필 이미지
푸에

작성한 질문수

[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)

망고플레이트 앱 소개 및 레이아웃 - RecyclerView, Glide

baseContext 동작안함

작성

·

256

0

package com.nadeukcha.horse

import android.app.LauncherActivity
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import androidx.navigation.findNavController
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.nadeukcha.horse.databinding.ActivityMainBinding

class RacehorseDetailsFragment : Fragment() {

    private val items = mutableListOf<RacehorseModel>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_racehorse_details, container, false)

        items.add(
            RacehorseModel(
                "https://www.horsepia.com/hp/pa/hh/PAHH2010/search.do#none",
                "https://www.horsepia.com/hp/pa/ac/photoResizer.do?file=0047386&extend=l.jpg&width=312&height=191&type=3&hrsGbCd=00100&bfHrno=047386",
                "기적의돌풍"
            )
        ) // items.add
        items.add(
            RacehorseModel(
                "https://www.horsepia.com/hp/pa/hh/PAHH2010/search.do#none",
                "https://www.horsepia.com/hp/pa/ac/photoResizer.do?file=0047386&extend=l.jpg&width=312&height=191&type=3&hrsGbCd=00100&bfHrno=047386",
                "기적의돌풍"
            )
        ) // items.add
        items.add(
            RacehorseModel(
                "https://www.horsepia.com/hp/pa/hh/PAHH2010/search.do#none",
                "https://www.horsepia.com/hp/pa/ac/photoResizer.do?file=0047386&extend=l.jpg&width=312&height=191&type=3&hrsGbCd=00100&bfHrno=047386",
                "기적의돌풍"
            )
        ) // items.add
        items.add(
            RacehorseModel(
                "https://www.horsepia.com/hp/pa/hh/PAHH2010/search.do#none",
                "https://www.horsepia.com/hp/pa/ac/photoResizer.do?file=0047386&extend=l.jpg&width=312&height=191&type=3&hrsGbCd=00100&bfHrno=047386",
                "기적의돌풍"
            )
        ) // items.add

        val rv = view.findViewById<RecyclerView>(R.id.racehorseRv)
        val rvAdapter = RvAdapter(baseContext ,items)

        rv.adapter = rvAdapter
//        rv.layoutManager = LinearLayoutManager(context)
        rv.layoutManager = GridLayoutManager(context, 2)

        // 경기 내역 확인
        view.findViewById<Button>(R.id.btn1).setOnClickListener {
            it.findNavController().navigate(R.id.action_racehorseDetailsFragment_to_matchdetailsFragment)
        }
        // 기수 상제 정보
        view.findViewById<Button>(R.id.btn3).setOnClickListener {
            it.findNavController().navigate(R.id.action_racehorseDetailsFragment_to_riderDetailsFragment)
        }
        // 기록 정보
        view.findViewById<Button>(R.id.btn4).setOnClickListener {
            it.findNavController().navigate(R.id.action_racehorseDetailsFragment_to_recordInfoFragment)
        }
        return view
    }

}

안녕하세요

Fragment 강의에서 봤던 동작이랑 이번에 RecyclerView 강의를 합쳐서 화면을 만들어보고있었습니다

그러던중 이번 강의 망고플레이트 앱 소개 및 레이아웃 - RecyclerView, Glide 강의의 24분 14초에 baseContext 추가하는 동작하를 하려고해는데 baseContext가 인식되지 않는 현상이있는데 따로 설정해줘야하는 부분이 있는건가요?

 

baseContext를 넣으면 이런 오류가 나옵니다

강의 내역과 조금 다른 질문인거같아 죄송합니다

답변 2

0

푸에님의 프로필 이미지
푸에
질문자

네 거기까지 진행하고 Import 했습니다 그래도 오류 나타납니다 아래는 RvAdpter 코드입니다

감사합니다..

package com.nadeukcha.horse




import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.view.menu.MenuView.ItemView
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide

class RvAdapter (val context : Context, val items : MutableList<RacehorseModel>) : RecyclerView.Adapter<RvAdapter.ViewHolder>(){
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RvAdapter.ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.rv_item, parent, false)

        return ViewHolder(view)
    }

    // View에 내용 입력
    override fun onBindViewHolder(holder: RvAdapter.ViewHolder, position: Int) {
        holder.bindItems(items[position])

        // 간격 설정
        val layoutParams = holder.itemView.layoutParams
        layoutParams.height = 200
        holder.itemView.requestLayout()

    }

    override fun getItemCount(): Int {
        return items.size
    }

    inner class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
        fun bindItems(item : RacehorseModel) {
            val rv_text = itemView.findViewById<TextView>(R.id.rvRaceHorse)
            val rv_img = itemView.findViewById<ImageView>(R.id.RaceHorseList)

            rv_text.text = item.horseName
            Glide.with(context)

//            val rv_text = itemView.findViewById<TextView>(R.id.rvRaceHorse)
//            rv_text.text = item
        }
    }
}

 

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

코드를 자세히 다시 보니

강의에서는 Activity에서 context를 전달해줬는데

득재님이 작성하신 코드에서는 Fragment에서 baseContext를 사용하고 있으신 것 같습니다.

 

https://curryyou.tistory.com/386

위의 부분을 참고하셔서 코드를 변경하셔도 좋고, 강의와 같이 activity를 사용하셔도 좋습니다.

 

잘 안되시면 전체 코드를 깃허브/구글 드라이브를 통해서 공유해주시면 제가 수정해드리겠습니다.

 

코드 변경을 어떻게 시도하셨는지도 알려주세요~

푸에님의 프로필 이미지
푸에
질문자

val rvAdapter = getActivity()?.let { RvAdapter(it.baseContext ,items) }

이방식으로 하니까 동작했습니다

0

개복치개발자님의 프로필 이미지
개복치개발자
지식공유자

24:26 초 부분에 RVAdapter 에 context를 추가해주는 부분이 있는데
이 부분을 하셔도 마찬가지인가요?

 

만약 그렇다면 RVAdapter 전체 코드도 공유해주시면 살펴보겠습니다.

푸에님의 프로필 이미지
푸에

작성한 질문수

질문하기