如何在android kotlin的适配器中调用片段

我正面临着如何从kotlin中的适配器中调用片段的问题。 请解决我的问题,而不使用活动上下文。 我正面临着如何从kotlin中的适配器中调用片段的问题。 请解决我的问题,而不使用活动上下文。

import android.app.FragmentManager import android.content.Context import android.support.v7.widget.RecyclerView import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.TextView import com.bumptech.glide.Glide import com.tk.amp.foodieflavours.Adapters.DashBoardAdapter.ViewHolder import com.tk.amp.foodieflavours.Fragments.FragmentOneList import com.tk.amp.foodieflavours.ModelClass.DashBoardModel import com.tk.amp.foodieflavours.R class DashBoardAdapter (var context: Context,var arrayList: ArrayList<DashBoardModel>) : RecyclerView.Adapter<ViewHolder>(){ override fun onBindViewHolder(holder: ViewHolder?, position: Int) { var dashBoardModel = arrayList.get(position) holder?.textView?.setText(dashBoardModel.title) Glide.with(context).load(dashBoardModel.images).into(holder?.imageView) holder?.itemView?.setOnClickListener { if (position==0){ val fragmentOneList = FragmentOneList() val fragmentManager = FragmentManager val fragmentTransaction = fragmentManager.beginTransaction() fragmentTransaction.replace(R.id.frame_layout, fragmentOneList) fragmentTransaction.commit() } } } override fun getItemCount(): Int { return arrayList.size } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder{ var view = LayoutInflater.from(parent?.context).inflate(R.layout.dash_board_layout,parent,false) return ViewHolder(view) } class ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){ var textView:TextView = itemView.findViewById(R.id.text_view_r1) as TextView var imageView:ImageView = itemView.findViewById(R.id.img_view_r1) as ImageView } } 

在这方面,Kotlin和Java并没有什么不同,所以请看一下Adapter中的Call a Fragment方法

另外,使用你传入的上下文有什么错误? 如果你反对,一个选择是

一种选择是从您的适配器发送Broadcast

在使用适配器的Activity / Fragment中:

 override fun onCreate ... { LocalBroadcastManager.getInstance(this).registerReceiver(myReceiver, IntentFilter("my-intent-filter")) ... ... } var myReceiver = object: BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { //Put the code you have about calling Fragments in here } } override fun onDestroy() { LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceiver) super.onDestroy() } 

并在您的适配器,把:

 val intent = Intent("my-intent-filter") intent.putExtra("key", value ) //optional LocalBroadcastManager.getInstance(ctx).sendBroadcast(intent)a