Android RecyclerView 不显示数据

问题描述 投票:0回答:1

我正在尝试从本地 Api 获取图像详细信息并使用

RecyclerView
显示它。数据已成功获取,因为我可以在 logcat 中看到
Log.d("data", data.toString())
的日志,但未显示。

这是该活动的源代码:

lateinit var rvMain:RecyclerView
lateinit var myAdapter: MyAdapter


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_2)
    rvMain = findViewById<RecyclerView>(R.id.recycler_view)
    setContent {

        rvMain.findViewById<RecyclerView>(R.id.recycler_view)
        rvMain.layoutManager = LinearLayoutManager(this)



        getAllData()

    }
}

private fun getAllData() {

    var retrofit = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build()
        .create(ApiInterface::class.java)

    var retroData = retrofit.getData()

    retroData.enqueue(object :Callback<List<MyDataItem>> {
        override fun onResponse(
            call:Call<List<MyDataItem>>,
            response: retrofit2.Response<List<MyDataItem>>
        ) {
            var data = response.body()

            myAdapter = MyAdapter(baseContext, data as ArrayList<MyDataItem>)

            rvMain.adapter = myAdapter

            Log.d("data", data.toString())
        }

        override fun onFailure(call: Call<List<MyDataItem>>, t: Throwable) {
            //Log.d("data", "!!! ERROR in getting data !!!")
            t.message?.let { Log.d("data", it) }
        }


    })

}

下面是我的适配器类的代码:

class MyAdapter(var con  :Context,val list:ArrayList<MyDataItem>):RecyclerView.Adapter<MyAdapter.ViewHolder>() {

    inner class ViewHolder(v : View):RecyclerView.ViewHolder(v) {
        var img = v.findViewById<ImageView>(R.id.RV_Image)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        var view = LayoutInflater.from(con).inflate(R.layout.list_item,parent,false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        Glide.with(con).load(list[position].image_path).into(holder.img)

    }

    override fun getItemCount(): Int {
        return list.count()
    }

}
android kotlin android-recyclerview
1个回答
1
投票

您必须删除

setContent {}
函数调用。

当使用Android Views时,活动的内容是使用布局id或视图通过

setContentView(R.layout.activity_2)
设置的。拨打
setContent
正在取代您的
activity_2
ComposeView
为 jetpack 撰写 UI 进行布局,并且您的原始布局与 UI 分离。

您的 Activity 的 onCreate 应该如下所示:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_2)
    rvMain = findViewById<RecyclerView>(R.id.recycler_view)

    rvMain.findViewById<RecyclerView>(R.id.recycler_view)
    rvMain.layoutManager = LinearLayoutManager(this)

    getAllData()
}
© www.soinside.com 2019 - 2024. All rights reserved.