<日記です。あまり読む価値ないと思います。>
金田著「はじめてのAndroidプログラミング(第5版)」で勉強しています。第8章の「ViewPager2を使う」まで進みました。
今日の主題は、ポリモフィズムです。
p255ページに「この(MyAdapter)クラスのコンストラクタはアクティビティ(FragmentActivity)のインスタンスを引数に取ります」と、記述があります。そこでMyAdapterクラスのソースコードを見るとコンストラクタの引数の型は確かにFragmentActivityになっています。
class MyAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) { // <==ここ
//省略
}
次にMyAdapterクラスのインスタンスを作っている部分を見てみると、
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
// 省略
binding.pager.adapter = MyAdapter(this) // <==ここ
}
}
どうしたことでしょう?MyAdapter(this)の部分をみれば分かるように、MyAdapter()の引数が、“this”になっています。thisとは、この場合MainActivityクラスの中で使っているのだから、自分自身、すなわちMainActivityをインスタンス化したものだよな、、、おかしいな、、MainActivityの親はAppCompatActivityクラスだしな、、その親はきっとActivityクラスなんだろうな、、、思ってしまいました。
しばらく、思いあぐねた末に思いついたことは、リファレンスを見るべきだと言うことで、見てみると、
AppCompatActivityクラスの親は、しっかりとFragmentActivityクラスでした。
俺って、まだまだだよな、、、っと、思いました。