我正在尝试从本地 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()
}
}
您必须删除
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()
}