スライドショーができるandroidアプリをkotlinで開発しているのですが、上手く実装出来ません。
androidアプリもあまり開発したことがなく、どこが間違っているのかもわかりません。
こちらのviewPagerのライブラリを使いました。
使用した理由は、自分で実装すると難しくなりそうだと思い、使用しました。
https://qiita.com/takaaki7/items/9f135eb9e52625eb206e
https://github.com/takaaki7/ArrayPagerAdapter
現状だとImageFragment.ktのthis.arguments.putString(itemKey, item)でアプリが落ちてしまいます。
ご教授頂けると幸いです。
MainActivity.kt
kotlin
1 2class MainActivity : AppCompatActivity() { 3 val TAG = "MainActivity" 4 5 @RequiresApi(Build.VERSION_CODES.DONUT) 6 override fun onCreate(savedInstanceState: Bundle?) { 7 super.onCreate(savedInstanceState) 8 setContentView(R.layout.activity_main) 9 10 // テスト用 11 val photo1 = "C:\Users\username\AndroidStudioProjects\PhotoApp\app\src\main\res\drawable\test.png" 12 val photo2 = "C:\Users\username\AndroidStudioProjects\PhotoApp\app\src\main\res\drawable\test2.png" 13 14 val adapter = ImageAdapter(supportFragmentManager, arrayListOf(photo1, photo2)) 15 // アダプターセット 16 (findViewById(R.id.viewPager) as ViewPager).adapter = adapter 17 } 18} 19
ImageAdapter.kt
kotlin
1 2class ImageAdapter(fm: FragmentManager, val datas: ArrayList<String>) : ArrayFragmentPagerAdapter<String>(fm,datas) { 3 4 override fun getCount(): Int { 5 return datas.size 6 } 7 8 override fun getFragment(item: String, position: Int): Fragment? { 9 return ImageFragment.newInstance(item,position) 10 } 11}
ImageFragment.kt
kotlin
1@Suppress("DEPRECATION") 2class ImageFragment: Fragment(){ 3 companion object { 4 val itemKey = "1" 5 6 fun newInstance(item :String, position: Int): Fragment { 7 return ImageFragment().apply { 8 this.arguments.putString(itemKey, item) 9 } 10 } 11 } 12 13 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { 14 return inflater.inflate(R.id.viewPager ,container) 15 } 16 17 override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { 18 val imageView = view!!.findViewById(R.id.slideImage) as ImageView 19 imageView.setImageResource(itemKey.toInt()) 20 } 21} 22
slide_image.xml
xml
1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent"> 5 <ImageView 6 android:id="@+id/slideImage" 7 android:layout_width="match_parent" 8 android:layout_height="match_parent" /> 9</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)
あなたの回答
tips
プレビュー