一覧から詳細を起動する一覧側(MainActivity.kt)の実装。
ListViewのsetOnItemClickListener()の書き方。
setOnItemClickListener()の引数はAdapterView.OnItemClickListenerオブジェクトを取る。
OnItemClickListenerオブジェクトは1つの仮想関数(Single Abstract Method)を持っていて、
それを実装したものを渡すことになる。
本来、OnItemClicListenerを派生したオブジェクトでSAMを実装したものを渡す、という
とても長い記述になるのだけれども、仮想関数が1個だけならば代わりにラムダ式を1個渡せば良い。
(SAM変換)。
ActivityからIntentを取得してIntentからActivityを起動する、という書き方。
Intentを取得するときにパラメタ(今回の場合はArticleインスタンス)が渡る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
package com.example.ikuty.myapplication import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.ListView import com.example.ikuty.myapplication.model.Article class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val listAdapter = ArticleListAdapter(applicationContext) val dummyArticle1 = dummyArticle("ikuty.com記事1","ikuty1") val dummyArticle2 = dummyArticle("ikuty.com記事2","ikuty2") listAdapter.articles = listOf(dummyArticle1,dummyArticle2) val listView: ListView = findViewById(R.id.list_view) as ListView listView.adapter = listAdapter listView.setOnItemClickListener { adapterView,view, position, id -> val article = listAdapter.articles[position] ArticleActivity.intent(this, article).let { startActivity(it) } } } } |