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
}
}次回コピペで使えるようにメモした。以上