简体   繁体   English

如何使用 kotlin 从适配器中的活动中获取价值

[英]How to get value from activity in adapter using kotlin

I have a value in my我的价值观

txtId.text = iduser

this is locate in MainActivity, i want to pass this value from my MainActivity这是位于 MainActivity,我想从我的 MainActivity 传递这个值

to my Adapter到我的适配器

  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
  }

i want this我要这个

params["userid"] = ???

to have a value from textview in my MainActivity, but i dont know how to passing that value to my Adapter.在我的 MainActivity 中有一个来自 textview 的值,但我不知道如何将该值传递给我的适配器。 So i can store it into my database所以我可以将它存储到我的数据库中

This is my code in MainActivity这是我在 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
        }
    }
}

And this is my code in my Adapter这是我在适配器中的代码

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

So for a simple i want this code所以对于一个简单的我想要这个代码

params["userid"] = ???

have a value from this code从此代码中有一个值

txtId.text = iduser

like this像这样

params["userid"] = txtId.text

You can simply add new attributes in your ProdukAdapter to store iduser .您可以简单地在ProdukAdapter中添加新属性来存储iduser When you initialized the adapter, pass it value from MainActivity to ProdukAdapter .初始化适配器时,将它的值从MainActivity传递给ProdukAdapter

Update your ProdukAdapter like this:像这样更新您的ProdukAdapter

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

in your MainActivity :在您的MainActivity中:

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

so in your getParams method simply use this value所以在你的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
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM