RecyclerView无法正常显示Pixabay API获取的图片求助
问题描述
使用Pixabay API获取图片,接口能返回预期结果,但RecyclerView显示图片存在异常。以下是相关代码片段,猜测问题可能和数据模型有关,寻求解决帮助。
ImageAdapter.kt
private val items = mutableListOf<Hit>() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ImageViewHolder { val inflater = LayoutInflater.from(parent.context) val view = inflater.inflate(R.layout.image_items, parent, false) return ImageViewHolder(view) } override fun onBindViewHolder(holder: ImageViewHolder, position: Int) { val currentItem = items[position] holder.image_id.text = currentItem.id.toString() Glide.with(holder.itemView.context).load(currentItem.largeImageURL).into(holder.image) } override fun getItemCount(): Int { return items.size } fun initData(itemsList: List<Hit>) { this.items.clear() this.items.addAll(itemsList) notifyDataSetChanged() } class ImageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { val image = itemView.findViewById<ImageView>(R.id.tv_Image) val image_id = itemView.findViewById<TextView>(R.id.image_id) }
ImageViewModel.kt
init { GlobalScope.launch { repo.getImages() } } val images: LiveData<List<Hit>> get() = repo.Images
MainActivity.kt
private lateinit var imageViewModel: ImageViewModel private lateinit var imageRecycler: RecyclerView private lateinit var adapter: ImageAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) imageRecycler = findViewById(R.id.recyclerView) adapter = ImageAdapter() imageRecycler.layoutManager = LinearLayoutManager(this) imageRecycler.adapter = adapter val api = RetrofitHelper.getInstance().create(PexelApi::class.java) val repo = ImageRepository(api) imageViewModel = ViewModelProvider(this, ImageViewModelFactory(repo))[ImageViewModel::class.java] imageViewModel.images.observe(this) { list -> adapter.initData(list) } }
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" tools:listitem="@layout/image_items" /> </LinearLayout>
image_items.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <androidx.cardview.widget.CardView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="250dp" android:layout_margin="10dp" android:elevation="10dp" app:cardCornerRadius="10dp"> <TextView android:id="@+id/image_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="12dp" android:text="id" /> <androidx.appcompat.widget.AppCompatImageView android:id="@+id/tv_Image" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" /> </androidx.cardview.widget.CardView> </LinearLayout>
内容的提问来源于stack exchange,提问作者Jadu
相关产品推荐
相关产品推荐

