Android Kotlin BaseAdapterでListViewを表示

やりたいこと
・定義したクラスのオブジェクトのリスト表示がしたい
・ネット上の画像を表示したい

RestAPIリクエストしてレスポンスを表示するようなありがちな形をイメージしてる
また、画像の表示にはPicassoというのが使ってる人が多そうなので使ってみる

以下のクラスのインスタンスのリストをListViewに表示する。imageUrlにはURL文字列を格納

// User.kt
class User(
  val id: Int,
  val name: String,
  val imageUrl: String,
  val comment: String
)

app/build.gradle

dependencies {
    ・・・
    implementation 'com.squareup.picasso:picasso:2.71828'
}

MainActivity

package com.example.list

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import com.example.list.Adapter.UserAdapter
import com.example.list.Model.User
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    var users = mutableListOf<User>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

	val imageURL = "https://example.com/path/to/img.jpg"
        val commnet = "テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト"

	users.add(User(1, "ユーザー1", imageURL, commnet))
        users.add(User(2, "ユーザー2", imageURL, commnet))
        users.add(User(3, "ユーザー3", imageURL, commnet))
        users.add(User(5, "ユーザー4", imageURL, commnet))
        users.add(User(6, "ユーザー5", imageURL, commnet))

        listView.adapter = UserAdapter(this, users)
    }
}

res/layout/activity_main.xml

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

res/layout/user_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="3sp">

    <ImageView
        android:id="@+id/thumbnail"
        android:padding="5sp"
        android:layout_width="100sp"
	android:layout_height="100sp" />

    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
	android:layout_toRightOf="@+id/thumbnail"
        android:textColor="#000"
        android:textStyle="bold"
	android:textSize="16sp"
        android:layout_marginTop="5sp"
        android:layout_marginLeft="5sp"/>

    <TextView
        android:id="@+id/comment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/name"
        android:layout_toRightOf="@+id/thumbnail"
        android:textColor="#000"
	android:textSize="14sp"
        android:padding="5sp"/>
</RelativeLayout>

Adapter/UserAdapter.kt

package com.example.list.Adapter

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import com.example.list.Model.User
import com.example.list.R
import com.squareup.picasso.Picasso
import com.squareup.picasso.PicassoProvider
import kotlinx.android.synthetic.main.user_item.view.*

class UserAdapter(val context: Context, val users: List<User>): BaseAdapter() {

    val layoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater

    override fun getCount(): Int {
        return users.count()
    }

    override fun getItem(position: Int): User {
        return users[position]
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
	val view = layoutInflater.inflate(R.layout.user_item, parent, false)
	Picasso.get().load(users[position].imageUrl).into(view.thumbnail)
	view.name.text = users[position].name
	view.comment.text = users[position].comment
	return view
    }
}

次回コピペで使えるようにメモした。以上