簡體   English   中英

Viewpager 不能為空 (Viewpager2)

[英]Viewpager must not be null (Viewpager2)

我正在嘗試在輔助活動上按下按鈕時實現 viewpager,為此我創建了一個 PageAdaper 類,它擴展了 Recycler view.Adapter 。我在運行時得到 viewpager must not be 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 params
                viewPager.adapter=iAdapter    // here comes the error
            }
        }

更新

畫廊活動.kt

它只包含 setContentview 到 activity_gallery.xml 是否需要添加任何內容。

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)
        }
    }
}

向我解釋這一點,因為我是 android 新手。 謝謝!

因此, 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)
        }
    }
}

試試那個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM