【问题标题】:Passing adapter text to fragment creating problems将适配器文本传递给片段创建问题
【发布时间】:2021-05-31 08:41:39
【问题描述】:

我想将数据传递给片段,因此当点击回收器适配器中的项目时,它会将从 firebase 获取的项目名称 (sample[position].text1) 传递给片段。我尝试了捆绑,界面,但两种方法都出错了。我在互联网上搜索,但没有找到任何可以解决我的问题的东西。 mainActivity(splash screen) 是我 App 中唯一的 Activity,其余都是片段。

我使用了内部类方法,我得到了结果,但是在另一个片段中,这个适配器附加了,我不希望它在那里。 问题: 将 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)
                }
    }
}

MainActivity(这是一个启动画面)

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
    )

}
}

【问题讨论】:

    标签: android kotlin android-fragments android-recyclerview


    【解决方案1】:

    我解决了这个问题

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

    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.....
        .........}
    

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      相关资源
      最近更新 更多