Skip to content Skip to sidebar Skip to footer

Kotlin-cant Replace Fragment From Recyclerview Adapter

I get Application terminated after click and I don't know where I must type the order of click in adapter or in fragment of RecyclerView Mainadapter.kt class ContentAdapter(

Solution 1:

I would recommend you to use a different approach than having the on click listener transactions in the Adapter.

This is the Adapter

classContentAdapterconstructor(privateval activity: MainActivity, privatevar listOfData: ArrayList<MainMarketTickClass>, val listener: ContentListener) : RecyclerView.Adapter<ContentAdapter.ViewHolder>() {

    overridefungetItemCount(): Int = listOfData.size
    overridefunonCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        var inf = ViewHolder(LayoutInflater.from(parent!!.context).inflate(R.layout.maintick, parent, false))
        return inf

    }

    overridefunonBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(listOfData, listener)
    }

    classViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {

        funbind(listOfData: ArrayList<MainMarketTickClass>, listener: ContentListener) {
            val dataListin2 = listOfData[adapterPosition]

            itemView.textView.text = dataListin2.title

            // this is the click listener. It calls the onItemClicked interface method implemented in the Activity
            itemView.setOnClickListener {
                listener.onItemClicked(listOfData.get(adapterPosition))
            }
        }
    }

    publicinterfaceContentListener{
        funonItemClicked(item: MainMarketTickClass)
    }

}

And this is the MainActivity

classMainMarket: Fragment(), ContentAdapter.ContentListener {

var ITEMSList = ArrayList<MainMarketTickClass>()

companionobject {
   funnewInstance():Fragment{

       var fb : MainMarket = MainMarket()
       return fb
   }
}


overridefunonCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    var inf = inflater!!.inflate(R.layout.main_marker,container,false)
    return inf
}

overridefunonViewCreated(view: View, savedInstanceState: Bundle?) {

    ITEMSList .add ( MainMarketTickClass("123"))
    ITEMSList .add ( MainMarketTickClass(" 123"))
    ITEMSList .add ( MainMarketTickClass("123"))

  var adapter = ContentAdapter (MainActivity(),ITEMSList)
    list.adapter = adapter
    list.layoutManager = LinearLayoutManager(this.context,LinearLayoutManager.VERTICAL,false)

}

override onItemClicked(item: MainMarketTickClass) {
// this method gets executed everytime an item gets clicked. You should // delegate the fragment transactions to the activity that hosts the fragment. // You should not do a fragment transaction from inside the fragment.// You can use a similar interface approach to contact the activity from the Fragment.

}

Post a Comment for "Kotlin-cant Replace Fragment From Recyclerview Adapter"