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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

Q&A

解決済

1回答

2857閲覧

ViewPager2を使って画像を切り替えるプログラムを書きたい

chimo

総合スコア55

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

0グッド

0クリップ

投稿2020/09/13 10:04

【目的】
ViewPager2を使って画像をきりかえるプログラムをかきたいです。使用している参考書ではViewPagerを選択していましたが、私のAndroid studioではViewPager2しかなく、そちらを選択すると参考書通りのコードを書いてもコンパイルがとおりません。

【コード】

Kotlin

1package com.example.myslideshow 2 3import android.os.Bundle 4import androidx.appcompat.app.AppCompatActivity 5import androidx.fragment.app.Fragment 6import androidx.fragment.app.FragmentPagerAdapter 7import kotlinx.android.synthetic.main.activity_main.* 8 9class MainActivity : AppCompatActivity() { 10 11 class MyAdapter(fm: androidx.fragment.app.FragmentManager) : FragmentPagerAdapter(fm) { 12 private val resources = listOf( 13 R.drawable.slide00, R.drawable.slide01, 14 R.drawable.slide02, R.drawable.slide03, 15 R.drawable.slide04, R.drawable.slide05, 16 R.drawable.slide06, R.drawable.slide07, 17 R.drawable.slide08, R.drawable.slide09 18 ) 19 20 //表示するビューの数 21 override fun getCount(): Int { 22 return resources.size 23 } 24 25 //引数にページ番号を受け取り、ImageFragmentのインスタンスを生成して返している 26 override fun getItem(position: Int): Fragment { 27 return ImageFragment.newInstance(resources[position]) 28 } 29 } 30 31 override fun onCreate(savedInstanceState: Bundle?) { 32 super.onCreate(savedInstanceState) 33 setContentView(R.layout.activity_main) 34 pager.adapter = MyAdapter(supportFragmentManager) 35 } 36}

【エラー】
コンパイルエラーが出ているのはこの部分です

Kotlin

1 pager.adapter = MyAdapter(supportFragmentManager)

エラー内容:

Type mismatch. Required: (RecyclerView.Adapter<RecyclerView.ViewHolder!>?..RecyclerView.Adapter<*>?) Found: MainActivity.MyAdapter

RecyclerViewなんて使っていないのですが...
ですがこちらの記事ViewPager vs ViewPager2を見つけて、RecyclerViewうんぬん言ってくるのはViewPager2を利用しているのが原因なのかな?と推測しております。ただ、解決方法は分かりません????

ーーーーーーーーーーーーーーーーーーーーーーー
どなたか、ご教授くださると幸いです。
宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Required (要求) されているのが RecyclerView.Adapter なので、使っているか否かは関係ないかと思います。

ViewPager2 では FragmentPagerAdapter ではなく FragmentStateAdapter を使うようになりました。
(備考: FragmentStateAdapterRecyclerView.Adapter のサブクラスです)

なので、FragmentStateAdapter を継承した MyAdapter を実装しなおせば良いかと。

class MyAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) { private val resources = listOf( R.drawable.slide00, R.drawable.slide01, R.drawable.slide02, R.drawable.slide03, R.drawable.slide04, R.drawable.slide05, R.drawable.slide06, R.drawable.slide07, R.drawable.slide08, R.drawable.slide09 ) //表示するビューの数 override fun getItemCount(): Int { return resources.size } //引数にページ番号を受け取り、ImageFragmentのインスタンスを生成して返している override fun createFragment(position: Int): Fragment { return ImageFragment.newInstance(resources[position]) } }

MyAdapter に渡す引数も変わります。Activity 自身を渡して下さい。

pager.adapter = MyAdapter(this)

公式に ViewPager から ViewPager2 への移行ガイドもアナウンスされているのでご一読ください。

ViewPager から ViewPager2 に移行する

投稿2020/09/13 10:51

編集2020/09/13 11:27
doughnut

総合スコア31

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

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

keicha_hrs

2020/09/13 11:10 編集

それに加えて、 pager.adapter = MyAdapter(supportFragmentManager) も pager.adapter = MyAdapter(this) に改める必要があります。
doughnut

2020/09/13 11:27

補足ありがとうございます。 回答に不足があり失礼致しました。頂いた内容で修正しておきます。
chimo

2020/09/13 15:00

なるほどです!!ご丁寧に有難うございました!無事解決できました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問