将适配器文本传递给片段创建问题

Passing adapter text to fragment creating problems

我想将数据传递给片段,因此当单击回收器适配器中的项目时,它会将从 firebase 获取的项目名称 (sample[position].text1) 传递给片段。我尝试了 bundle、interface,但在互联网上搜索 methods.I 时都出现错误,但没有找到任何可以解决我问题的方法。 mainActivity(splash screen) 在我的 App 中只有 Activity 其余都是片段。

我使用了内部 class 方法,我得到了结果,但是在这个适配器附加的另一个片段中,我不希望它在那里。 问题: 将 sample[position].text1 传递给片段,这样我就可以将它传递给 db.collection("here") 以从 Firebase 获取数据。

适配器

class dashboard_gridlayout_adapter(
private val sampledata: ArrayList<daxhboard_gridlayout_data>
): Adapter<dashboard_gridlayout_adapter.dashboard_viewholder>() {


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): dashboard_viewholder {
    val itemView = LayoutInflater.from(parent.context).inflate(R.layout.dashboard_gridlayout_single_item_design, parent, false)
    return dashboard_viewholder(itemView)
}

override fun onBindViewHolder(holder: dashboard_viewholder, position: Int) {

    Glide.with(holder.itemView).load(sampledata[position].imageResource)
            .placeholder(R.drawable.ic_baseline_history_icon)
            .into(holder.imageView)


    holder.textView.text = sampledata[position].text1
    holder.itemView.setOnClickListener {
        val appCompatActivity = it.context as AppCompatActivity
        appCompatActivity.supportFragmentManager.beginTransaction()
                .replace(R.id.Activity_frag_container, service_providers_list())
                .addToBackStack(null)
                .commit()
    }
}

override fun getItemCount() = sampledata.size

inner class dashboard_viewholder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    val imageView: ImageView = itemView.dashboard_adapter_image
    val textView: TextView = itemView.dashboard_adapter_text

}
}

片段

class service_providers_list : Fragment(){

private var db = FirebaseFirestore.getInstance()
private lateinit var service_list_recycler: RecyclerView
var servlist = ArrayList<service_provider_list_data>()


override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.service_providers_list, container, false)
    }


    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        getserviceproviderdata()
        service_list_recycler = service_provider_recycle_view.findViewById(R.id.service_provider_recycle_view)
        service_provider_recycle_view.layoutManager = LinearLayoutManager(this.requireContext())
        service_provider_recycle_view.setHasFixedSize(true)
    }


    private fun getserviceproviderdata() {

        db.collection("Barber").orderBy("dist")
                .get()
                .addOnSuccessListener { documents ->
                    servlist.clear()
                    for (document in documents) {

                        val imgurl = document.data["imageResource"].toString()
                        val prov_name = document.data["provider_name"].toString()
                        val prov_address = document.data["provider_address"].toString()
                        val prov_rate = document.data["provider_rating"].toString()
                        val prov_dist = document.data["provider_distance"].toString()

                        servlist.add(service_provider_list_data(imgurl, prov_name, prov_address, prov_rate, prov_dist))
                        service_provider_recycle_view.adapter = service_provider_list_adapter(servlist)
                    }
                }
                .addOnFailureListener { exception ->
                    Log.e("serf", "Error getting documents: ", exception)
                }
    }
}

主要Activity(这是启动画面)

class MainActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

   
    @Suppress("DEPRECATION")
    Handler().postDelayed(
        {

            supportFragmentManager.beginTransaction().replace(R.id.Activity_frag_container,Login_Screen()).commit()
        },
        1500
    )

}
}

我解决了这个问题

只需在适配器中的替换中添加新参数(需要传递)

holder.itemView.setOnClickListener {
        val datashares = sampledata[position].text1
        val appCompatActivity = it.context as AppCompatActivity
        appCompatActivity.supportFragmentManager.beginTransaction()
                .replace(R.id.Activity_frag_container, service_providers_list(datashares))
                .addToBackStack(null)
                .commit()

    }

在片段内部只需添加

class service_providers_list(datashares: String) Fragment(){
  //variable declaration
   private var datasharae = datashares

 (inside function where i wnt to add code i.e getserviceproviderdata() )

  fun getserviceproviderdata() {

        db.collection(datasharae)
     .............
    ..............
    ......rest code.....
    .........}