【问题标题】:How to get value from activity in adapter using kotlin如何使用 kotlin 从适配器中的活动中获取价值
【发布时间】:2020-11-27 15:28:51
【问题描述】:

我有一个价值

txtId.text = iduser

这是位于 MainActivity,我想从我的 MainActivity 传递这个值

到我的适配器

  override fun getParams(): MutableMap<String, String> {
      val params = HashMap<String, String>()
      params["userid"] = ???
      params["produkid"]=produks[position].id.toString()
      params["quantity"]= 1.toString()
      return params
  }

我想要这个

params["userid"] = ???

在我的 MainActivity 中有一个来自 textview 的值,但我不知道如何将该值传递给我的适配器。 所以我可以将它存储到我的数据库中

这是我在 MainActivity 中的代码

class MainActivity : AppCompatActivity() {
    val fragments:ArrayList<Fragment> = ArrayList()
    var iduser=""

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        fragments.add(HomeFragment())
        fragments.add(CartFragment())
        fragments.add(OrderHistoryFragment())
        fragments.add(ProfileFragment())

        iduser =intent.getStringExtra(LoginActivity.IDUSER).toString()
        txtId.text = iduser

        viewPager.adapter = Adapter(this,fragments)
        viewPager.registerOnPageChangeCallback(object:ViewPager2.OnPageChangeCallback(){
            override fun onPageSelected(position: Int) {
                val menu = arrayOf(R.id.itemHome,R.id.itemCart,R.id.itemOrderHistory,R.id.itemProfile)
                bottomNav.selectedItemId=menu[position]
            }
        })

        bottomNav.setOnNavigationItemSelectedListener {
            if(it.itemId == R.id.itemHome) {
                viewPager.currentItem = 0
            } else if(it.itemId == R.id.itemCart) {
                viewPager.currentItem = 1
            } else if(it.itemId == R.id.itemOrderHistory) {
                viewPager.currentItem = 2
            } else {
                viewPager.currentItem = 3
            }
            true
        }
    }
}

这是我在适配器中的代码

class ProdukAdapter(val produks:ArrayList<Produk>, val ctx:Context):RecyclerView.Adapter<ProdukAdapter.ProdukViewHolder>(){

    class ProdukViewHolder(val view: View):RecyclerView.ViewHolder(view){

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProdukViewHolder {
        val inflater = LayoutInflater.from(parent.context)
        val view = inflater.inflate(R.layout.home_card_layout,parent,false)
        return ProdukViewHolder(view)
    }

    override fun onBindViewHolder(holder: ProdukViewHolder, position: Int) {
        val url = produks[position].gambar
        Picasso.get().load(url).into(holder.view.imgProduk)
        holder.view.txtJudul.text = produks[position].judul
        holder.view.txtDeskripsi.text = produks[position].deskripsi
        holder.view.txtHarga.text = produks[position].harga.toString()

        holder.view.btnAddtoCart.setOnClickListener {
            val q = Volley.newRequestQueue(ctx)
            val url = "http://10.0.2.2/project/addtocart.php"
            val stringRequest = object: StringRequest(
                Request.Method.POST, url,
                Response.Listener {
                    Log.d("cekparams", it)    
                },
                Response.ErrorListener {
                    Log.d("cekparams", it.message.toString())
                }) {
                override fun getParams(): MutableMap<String, String> {
                    val params = HashMap<String, String>()
                    params["userid"] = ???
                    params["produkid"]=produks[position].id.toString()
                    params["quantity"]= 1.toString()
                    return params
                }
            }
            q.add(stringRequest)
        }
    }

    override fun getItemCount(): Int {
        return produks.size
    }
}

所以简单来说我想要这个代码

params["userid"] = ???

从这段代码中获得价值

txtId.text = iduser

喜欢这个

params["userid"] = txtId.text

【问题讨论】:

    标签: android android-studio kotlin android-activity android-adapter


    【解决方案1】:

    您只需在ProdukAdapter 中添加新属性即可存储iduser。初始化适配器时,将其值从 MainActivity 传递给 ProdukAdapter

    像这样更新你的ProdukAdapter

    class ProdukAdapter(val iduser: String, val produks:ArrayList<Produk>, val ctx:Context):RecyclerView.Adapter<ProdukAdapter.ProdukViewHolder>()
    

    在你的MainActivity:

    val produkAdapter = ProdukAdapter(txtId.text, produks, this)
    

    所以在您的 getParams 方法中只需使用此值

    override fun getParams(): MutableMap<String, String> {
          val params = HashMap<String, String>()
          params["userid"] = iduser
          params["produkid"]=produks[position].id.toString()
          params["quantity"]= 1.toString()
          return params
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 2021-03-16
      • 2020-07-26
      • 1970-01-01
      • 2021-03-07
      • 2021-09-28
      • 2016-08-09
      相关资源
      最近更新 更多