質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

3629閲覧

kotlinでtype mismatchが発生した。解決方法を知りたい

chemical

総合スコア24

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/09/08 05:08

前提・実現したいこと

発生している問題・エラーメッセージ

はじめてandroidプログラミングという本のチャプター8、フラグメントを使ったスライドショーアプリを開発しています。
230ページのViewPagerとViewAdapterを関連付けさせる下記コードの一文にて、エラーメッセージが出力されました。

pager.adapter = MyAdapter(supportFragmentManager)
Type mismatch: inferred type is MainActivity.MyAdapter but RecyclerView.Adapter<(raw) RecyclerView.ViewHolder!>? was expected

該当のソースコード

kotlin

1package com.example.myslideshow 2 3 4import android.media.MediaPlayer 5import android.os.Bundle 6import android.os.Handler 7import androidx.appcompat.app.AppCompatActivity 8import androidx.fragment.app.Fragment 9import androidx.fragment.app.FragmentManager 10import androidx.fragment.app.FragmentPagerAdapter 11import kotlinx.android.synthetic.main.activity_main.* 12import kotlin.concurrent.timer 13 14class MainActivity : AppCompatActivity() { 15 16 private lateinit var player: MediaPlayer 17 18 class MyAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) { 19 private val resources = listOf( 20 R.drawable.slide00, R.drawable.slide01, 21 R.drawable.slide02, R.drawable.slide03, 22 R.drawable.slide04, R.drawable.slide05, 23 R.drawable.slide06, R.drawable.slide07, 24 R.drawable.slide08, R.drawable.slide09 25 ) 26 27 override fun getCount(): Int { 28 return resources.size 29 } 30 31 override fun getItem(position: Int): Fragment { 32 return ImageFragment.newInstance(resources[position]) 33 } 34 } 35 36 override fun onCreate(savedInstanceState: Bundle?) { 37 super.onCreate(savedInstanceState) 38 setContentView(R.layout.activity_main) 39 pager.adapter = MyAdapter(supportFragmentManager) 40 val handler = Handler() 41 timer(period = 5000) { 42 handler.post { 43 pager.currentItem = (pager.currentItem + 1) % 10 44 } 45 } 46 player = MediaPlayer.create(this, R.raw.getdown) 47 player.isLooping = true 48 } 49 50 override fun onResume() { 51 super.onResume() 52 player.start() 53 } 54 55 override fun onPause() { 56 super.onPause() 57 player.pause() 58 } 59} 60

コードの書き漏れを特にないようです。解決方法が知りたいです

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ViewPagerは非推奨になり、ViewPager2がリリースされています。Activityのレイアウトに配置したのも、恐らくViewPager2ではないかと思います。そのため、ViewPager2に対応させるための若干の変更が必要になります。

(参考資料)ViewPager から ViewPager2 に移行する | Android Develpers

kotlin

1 class MyAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) { // 修正箇所① 2 private val resources = listOf( 3 R.drawable.slide00, R.drawable.slide01, 4 R.drawable.slide02, R.drawable.slide03, 5 R.drawable.slide04, R.drawable.slide05, 6 R.drawable.slide06, R.drawable.slide07, 7 R.drawable.slide08, R.drawable.slide09 8 ) 9 10 override fun getItemCount(): Int { // 修正箇所② 11 return resources.size 12 } 13 14 override fun createFragment(position: Int): Fragment { // 修正箇所③ 15 return ImageFragment.newInstance(resources[position]) 16 } 17 } 18 19 override fun onCreate(savedInstanceState: Bundle?) { 20 super.onCreate(savedInstanceState) 21 setContentView(R.layout.activity_main) 22 pager.adapter = MyAdapter(this) // 修正箇所④ 23 24 (以下略) 25

投稿2020/09/08 07:41

keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問