SBクリエイティブの基本からしっかり身につくAndroidアプリ開発入門
をやっていて、サンプルコードでエラーになるところをあげます。
Capter6のRSSリーダーアプリ作成時のAsyncTaskLoaderを使うところで、コードの変更(loaderManager
をsupportLoaderManager
へ)が必要でした。
- エラー
Type inference failed: fun <D : Any!> initLoader(p0: Int, p1: Bundle!, p2: LoaderManager.LoaderCallbacks<D!>!): Loader<D!>!
cannot be applied to
(Int,Nothing?,MainActivity)
- コード
package com.example.rssreader
import android.os.Bundle
import android.support.v4.app.LoaderManager
import android.support.v4.content.Loader
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.GridLayoutManager
import android.support.v7.widget.RecyclerView
class MainActivity : AppCompatActivity(), LoaderManager.LoaderCallbacks<Rss> {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ここをsupportLoaderManagerに変更する
// loaderManager.initLoader(1, null, this)
supportLoaderManager.initLoader(1, null, this)
}
override fun onCreateLoader(id: Int, args: Bundle?): Loader<Rss> {
return RssLoader(this)
}
override fun onLoadFinished(loader: Loader<Rss>, data: Rss?) {
if (data != null) {
// recycler view
val recyclerView = findViewById<RecyclerView>(R.id.articles)
val adapter = ArticleAdpter(this, data.articles) {
// 記事タップしたときの処理
}
recyclerView.adapter = adapter
// グリット表示
val layoutManager = GridLayoutManager(this, 2)
recyclerView.layoutManager = layoutManager
}
}
override fun onLoaderReset(p0: Loader<Rss>) {
// do nothing
}
}