J'essaie de créer un simple recyclerView en Kotlin avec des données que je reçois via Volley (qui, je l'ai confirmé, renvoie les données correctes), mais je tombe toujours sur l'erreur suivante E/RecyclerView: No adapter attached; skipping layout
alors qu'en fait j'ai spécifié un adaptateur avec la classe d'adaptateur personnalisée que j'ai créée :
class ImageAdapter(var c: Context, var list: ArrayList<Image>) : RecyclerView.Adapter<ImageAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder? {
val layoutInflater = LayoutInflater.from(parent.context)
return ViewHolder(layoutInflater.inflate(R.layout.image_cardview, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val imageUrl = list[position].url
val submitter = list[position].submitter
val color = list[position].color
holder.submitterTV.text = submitter
holder.card.setCardBackgroundColor(Color.parseColor(color))
}
override fun getItemCount() = list.size
class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
val card = itemView.card
val submitterTV = itemView.submitter
val imageView = itemView.image
}
}
C'est ma classe MainActivty, où je fais l'appel réel pour le JSON et où j'essaie d'attacher mon adaptateur avec ma ArrayList que j'ai créée :
class MainActivity : AppCompatActivity() {
val images = ArrayList<Image>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
imageList.layoutManager = LinearLayoutManager(applicationContext)
request("https://api.unsplash.com/photos/curated/?client_id=API_KEY")
imageList.adapter = ImageAdapter(applicationContext, images)
}
private fun request(url: String) {
val queue = Volley.newRequestQueue(this)
val stringRequest = JsonArrayRequest(url, Response.Listener<JSONArray> { response ->
try {
for (i in 0..(response.length() - 1)) {
val image: Image = Image(response.getJSONObject(i).getJSONObject("urls").getString("full"), response.getJSONObject(i).getJSONObject("user").getString("username"), response.getJSONObject(i).getString("color"))
images.add(image)
}
imageList.adapter.notifyDataSetChanged()
} catch (e: JSONException) {
e.printStackTrace()
}
}, Response.ErrorListener { })
queue.add(stringRequest)
}
}
J'ai créé une classe de données personnalisée Image
qui stocke trois champs : l'imageUrl, l'expéditeur et la couleur, qui sont tous dérivés du JSON. Je pensais qu'appeler notifyDataSetChanged()
sur mon adaptateur après que la requête ait été complétée permettrait à la recyclerView d'être mise à jour et d'afficher les articles, mais rien du tout ne s'affiche à l'écran. Quelqu'un a-t-il une idée de l'endroit où je me suis trompé ?