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
    }
}