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

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

ただいまの
回答率

89.13%

KotlinでのviewPager実装

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,240

DDon

score 33

スライドショーができるandroidアプリをkotlinで開発しているのですが、上手く実装出来ません。
androidアプリもあまり開発したことがなく、どこが間違っているのかもわかりません。

こちらのviewPagerのライブラリを使いました。
使用した理由は、自分で実装すると難しくなりそうだと思い、使用しました。
https://qiita.com/takaaki7/items/9f135eb9e52625eb206e
https://github.com/takaaki7/ArrayPagerAdapter

現状だとImageFragment.ktのthis.arguments.putString(itemKey, item)でアプリが落ちてしまいます。

ご教授頂けると幸いです。

MainActivity.kt

class MainActivity : AppCompatActivity() {
    val TAG = "MainActivity"

    @RequiresApi(Build.VERSION_CODES.DONUT)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // テスト用
        val photo1 = "C:\\Users\\username\\AndroidStudioProjects\\PhotoApp\\app\\src\\main\\res\\drawable\\test.png"
        val photo2 = "C:\\Users\\username\\AndroidStudioProjects\\PhotoApp\\app\\src\\main\\res\\drawable\\test2.png"

        val adapter = ImageAdapter(supportFragmentManager, arrayListOf(photo1, photo2))
        // アダプターセット
        (findViewById(R.id.viewPager) as ViewPager).adapter = adapter
    }
}

ImageAdapter.kt

class ImageAdapter(fm: FragmentManager, val datas: ArrayList<String>) : ArrayFragmentPagerAdapter<String>(fm,datas) {

    override fun getCount(): Int {
        return  datas.size
    }

    override fun getFragment(item: String, position: Int): Fragment? {
        return ImageFragment.newInstance(item,position)
    }
}

ImageFragment.kt

@Suppress("DEPRECATION")
class ImageFragment: Fragment(){
    companion object {
        val itemKey = "1"

        fun newInstance(item :String, position: Int): Fragment {
            return ImageFragment().apply {
                this.arguments.putString(itemKey, item)
            }
        }
    }

    override  fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        return inflater.inflate(R.id.viewPager ,container)
    }

    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        val imageView = view!!.findViewById(R.id.slideImage) as ImageView
        imageView.setImageResource(itemKey.toInt())
    }
}

slide_image.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/slideImage"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>


ErrorLog

10-30 12:49:49.698 22499-22499/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: com.example.doumaekazuki.photoapp, PID: 22499
                                                   java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.Bundle.putString(java.lang.String, java.lang.String)' on a null object reference
                                                       at com.example.doumaekazuki.photoapp.ImageFragment$Companion.newInstance(ImageFragment.kt:23)
                                                       at com.example.doumaekazuki.photoapp.ImageAdapter.getFragment(ImageAdapter.kt:18)
                                                       at com.example.doumaekazuki.photoapp.ImageAdapter.getFragment(ImageAdapter.kt:9)
                                                       at com.nakama.arrayviewpager.ArrayFragmentPagerAdapter.instantiateItem(ArrayFragmentPagerAdapter.java:66)
                                                       at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1034)
                                                       at android.support.v4.view.ViewPager.populate(ViewPager.java:1182)
                                                       at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
                                                       at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642)
                                                       at android.view.View.measure(View.java:21998)
                                                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)
                                                       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
                                                       at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1167)
                                                       at android.widget.LinearLayout.onMeasure(LinearLayout.java:687)
                                                       at android.view.View.measure(View.java:21998)
                                                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)
                                                       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
                                                       at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
                                                       at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
                                                       at android.view.View.measure(View.java:21998)
                                                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)
                                                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                       at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
                                                       at android.view.View.measure(View.java:21998)
                                                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)
                                                       at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:393)
                                                       at android.view.View.measure(View.java:21998)
                                                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)
                                                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                       at android.view.View.measure(View.java:21998)
                                                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)
                                                       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1514)
                                                       at android.widget.LinearLayout.measureVertical(LinearLayout.java:806)
                                                       at android.widget.LinearLayout.onMeasure(LinearLayout.java:685)
                                                       at android.view.View.measure(View.java:21998)
                                                       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6580)
                                                       at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                       at com.android.internal.policy.DecorView.onMeasure(DecorView.java:721)
                                                       at android.view.View.measure(View.java:21998)
                                                       at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2410)
                                                       at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1498)
                                                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1751)
                                                       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1386)
                                                       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6733)
                                                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
                                                       at android.view.Choreographer.doCallbacks(Choreographer.java:723)
                                                       at android.view.Choreographer.doFrame(Choreographer.java:658)
                                                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
                                                       at android.os.Handler.handleCallback(Handler.java:789)
                                                       at android.os.Handler.dispatchMessage(Handler.java:98)
                                                       at android.os.Looper.loop(Looper.java:164)
                                                       at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • DDon

    2017/10/31 18:47

    どうやら使用しているライブラリの中が上手くいってないみたいです

    キャンセル

  • YasuhiroMiyake

    2017/10/31 20:46

    putStringメソッドには、どちらの引数にもnullは渡していないということであっていますでしょうか。

    キャンセル

  • DDon

    2017/11/01 16:13

    そうですね。ちょっとライブラリがあまりうまく使えてないみたいなので、別のアプローチでやってみようと思います。

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる