2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Android AppCompatActivityクラスは、なぜFragmentActivity型の引数に代入できるのか?(当たり前ではありますが、、、)

Last updated at Posted at 2021-01-17

 <日記です。あまり読む価値ないと思います。>
 金田著「はじめてのAndroidプログラミング(第5版)」で勉強しています。第8章の「ViewPager2を使う」まで進みました。

 今日の主題は、ポリモフィズムです。

 p255ページに「この(MyAdapter)クラスのコンストラクタはアクティビティ(FragmentActivity)のインスタンスを引数に取ります」と、記述があります。そこでMyAdapterクラスのソースコードを見るとコンストラクタの引数の型は確かにFragmentActivityになっています。

MyAdapter.kt
class MyAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {    // <==ここ
        //省略
}

次にMyAdapterクラスのインスタンスを作っている部分を見てみると、

MainActivity.kt
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クラスの系譜.png
AppCompatActivityクラスの親は、しっかりとFragmentActivityクラスでした。

 俺って、まだまだだよな、、、っと、思いました。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?