Viewpager不能为nullViewpager2

问题描述

我正在尝试在辅助活动上按下按钮时实现viewpager,因为我创建了一个扩展Recycler view.Adapter的PageAdaper类。我在运行时获得viewpager一定不能为null错误

PageAdaper.kt

open class PageAdapter(context: Context,arrayList: ArrayList<Uri>) : RecyclerView.Adapter<PageAdapter.MyViewHolder>() {
    private var mContext: Context? =null
    private var galleryUri= arraylistof<Uri>()
    private var layoutInflater: LayoutInflater? =null
    init {
        this.mContext=context
        this.galleryUri=arrayList
        this.layoutInflater=context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
    }
    private fun onBindViewHolderr(holder: MyViewHolder,position: Int) {
        holder.iView.setimageURI(galleryUri[position])
    }
    override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): MyViewHolder {
        val view=LayoutInflater.from(mContext).inflate(R.layout.image_container,parent,false)
        return MyViewHolder(view)
    }
    override fun getItemCount(): Int {
        return galleryUri.size
    }
    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val iView: ImageView
        init {
            super.itemView
            iView=itemView.findViewById(R.id.imageContainer)
        }
    }
    override fun onBindViewHolder(holder: MyViewHolder,position: Int) {
        onBindViewHolderr(holder,position)
    }
}

Image_container.xml


<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/imageContainer"
        android:contentDescription="@string/gallery" />
</LinearLayout>

Activity_gallery.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageButton
        android:id="@+id/galleryBack"
        android:layout_width="59dp"
        android:layout_height="56dp"
        android:background="@android:color/transparent"
        android:contentDescription="@string/back_button"
        android:src="@drawable/ic_baseline_arrow_back_24"
        style="@style/Widget.AppCompat.Button.Colored"
        app:layout_constraintHorizontal_bias="0.05"
        app:layout_constraintVertical_bias="0.05"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/viewPager"
        android:layout_width="409dp"
        android:layout_height="729dp"
        android:background="@android:color/black"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

    </androidx.viewpager2.widget.ViewPager2>

</androidx.constraintlayout.widget.ConstraintLayout>

在activity_main上单击按钮时在viewpager上创建

gallery.setonClickListener {    // gallery button reference
            if (lastimageUri!=null){
                val intent= Intent(this,galleryActivity::class.java) 
                startActivity(intent)    // inflates activity_gallery.xml
                val iAdapter=PageAdapter(this,galleryUri) // creating object with p@R_404_6460@ms
                viewPager.adapter=iAdapter    // here comes the error
            }
        }

更新

galleryActivity.kt

它仅包含对activity_gallery.xml的setContentview 我是否需要添加任何内容

class galleryActivity : AppCompatActivity() {
    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_gallery)
        overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right)
        galleryBack.setonClickListener {
            finish()
            overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right)
        }
    }
}

向我解释一下这是我的新手。谢谢!

解决方法

因此,startActivity将进入GalleryActivity类。您需要将其后的行放入GalleryActivity中。

好的,现在您已经添加了GalleryActivity.kt。您需要进行2次更改。首先,在您的activity_main中:

gallery.setOnClickListener {    // gallery button reference
   if (lastImageUri!=null){
      val intent= Intent(this,GalleryActivity::class.java)
      intent.putExtra("IMAGE_URI",galleryUri)
      startActivity(intent)    // inflates activity_gallery.xml
   }
}

然后,在您的GalleryActivity.kt中

class GalleryActivity : AppCompatActivity() {
    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_gallery)

        val galleryUri = getIntent().getStringExtra("GALLERY_URI")
        val iAdapter=PageAdapter(this,galleryUri) // creating object with params
        viewPager.adapter=iAdapter 
     overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right)
        galleryBack.setOnClickListener {
            finish()
            overridePendingTransition(android.R.anim.slide_in_left,android.R.anim.slide_out_right)
        }
    }
}

尝试一下。