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"