0
votes

Kotlin: Comment appeler GetsUpportFragmentManager () dans RecyclerView.adapter

J'aimerais appeler le gestionnaire de fragment de support dans mon recyclisteView.adapter après l'événement de clic afin de passer à un fragment différent. Mon approche: xxx

mais je reçois l'erreur suivante:

kotlin.typecastException: NULL ne peut pas être lancé sur le type non nul

Pouvez-vous m'aider?


2 commentaires

Contexte est NULL, assurez-vous simplement de définir une valeur avant de la jeter sur MainActivity


Il s'agit d'une exception tycâte et il dit que ne peut pas être lancé sur le type non nul quelque chose qui ne permet pas NULL que vous passez null. À Kotlin, vous devez ajouter ? pour faire en nullable


4 Réponses :


1
votes

Ceci est dû au fait que votre instance dans l'adaptateur n'est pas garantie d'être une activité . Il pourrait potentiellement être un contextwrapper détenant l'activité comme base contexte . Tenter de déballer ce serait fragile.

Au lieu de cela, je vous recommanderais de définir une interface dans votre adaptateur. À partir de votre activité , fournissez une implémentation de cette interface à votre adaptateur qui effectuera le fragmenttransaction . Par exemple: xxx

puis, dans l'activité issualisation myAdapter : xxx < / pré>


0 commentaires

0
votes

Je vous suggère de gérer votre transaction de fragment dans votre fragment / activité . Cela vous aiderait à avoir un code plus propre et à utiliser le contexte dans fragment / activité est beaucoup plus facile. Essayez de définir l'interface entre votre adaptateur et votre fragment et appelez votre méthode d'interface dans l'adaptateur et implémentez l'interface dans activité / fragment . Là, vous pouvez accéder au contexte facilement.


0 commentaires

0
votes

Obtenez l'activité ou le fragment comme argument dans votre adaptateur.

class ArticleAdapter(private val articleActivity: ArticleActivity, private val docs: List<ArticleResult.ArticleDoc>) : RecyclerView.Adapter<ArticleAdapter.Holder>() {
    override fun onCreateViewHolder(p0: ViewGroup, p1: Int): Holder = Holder(LayoutInflater.from(p0.context).inflate(R.layout.row_general2, p0, false))
    override fun getItemCount(): Int = docs.size

    override fun onBindViewHolder(holder: Holder, position: Int) {
        articleActivity.supportFragmentManager
    }

    class Holder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val textViewTitleRow = itemView.findViewById<TextView>(R.id.textViewTitleRow)!!
        val textView1Row = itemView.findViewById<TextView>(R.id.textView1Row)!!
        val textView2Row = itemView.findViewById<TextView>(R.id.textView2Row)!!
        val imageViewDownloadRow = itemView.findViewById<ImageView>(R.id.imageViewDownloadRow)!!
        val textViewMoreRow = itemView.findViewById<TextView>(R.id.textViewMoreRow)!!
        val imageViewBookRow = itemView.findViewById<ImageView>(R.id.imageViewBookRow)!!
    }
}


0 commentaires

1
votes

15 juin 2020 - kotlin répond

Si vous voulez appeler "supportfragmentManager" dans fragment : xxx

@Canerkaseler


0 commentaires