【问题标题】:How to get the selected items from dynamic created spinner如何从动态创建的微调器中获取所选项目
【发布时间】:2019-07-06 17:33:50
【问题描述】:

我有一个从服务器加载动态数据的微调器。微调器中的每个项目也有自定义布局。 我设法在微调器中显示数据。有人可以帮我获得选定的值吗?

我已经尝试过 spinner.getItemIdAtPosition(position) 但即使我点击任何项目,我也会得到 0 的结果。

这是我的适配器代码:

class CustomDropDownAdapter(val context: Context, var batchList: Array<BatchList>) : BaseAdapter() {


    val mInflater: LayoutInflater = LayoutInflater.from(context)

    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val view: View
        val vh: ItemRowHolder
        if (convertView == null) {
            view = mInflater.inflate(R.layout.batch_row_spinner, parent, false)
            vh = ItemRowHolder(view)
            view?.tag = vh
        } else {
            view = convertView
            vh = view.tag as ItemRowHolder
        }


        vh.date.text = batchList.get(position).expiry_date
        vh.availQty.text = "Available: ${batchList.get(position).available_quantity}"
        return view
    }

    override fun getItem(position: Int): Any? {

        return null

    }

    override fun getItemId(position: Int): Long {

        return 0

    }

    override fun getCount(): Int {
        return batchList.size
    }

    private class ItemRowHolder(row: View?) {

        val date: TextView
        val availQty: TextView

        init {
            this.date = row?.findViewById(R.id.date) as TextView
            this.availQty = row?.findViewById(R.id.available) as TextView
        }
    }
}

这是我在微调器中加载的函数

/**Method to load all items in spinner */
private fun loadBatch(medicineId:String,pharmaId:String)
{
    val call=RetrofitClient.instance.api.displayBatchList("Bearer $token",20.toString(),medicineId,0.toString(),pharmaId)
    call.enqueue(object :Callback<Array<BatchList>>{
        override fun onResponse(call: Call<Array<BatchList>>, response: Response<Array<BatchList>>) {
           if(response.code()==200)
           {

                   var spinnerAdapter: CustomDropDownAdapter = CustomDropDownAdapter(context!!, response.body()!!)
               updateMedView.pharmaSpinerbatch.adapter = spinnerAdapter


           }
        }

        override fun onFailure(call: Call<Array<BatchList>>, t: Throwable) {
            Log.e("Batch Load error",t.message)
        }


    })


}

我需要获取选中的项目

【问题讨论】:

  • 您有两个选项,1. setOnItemClickListener 并获取所选项目的位置,如果您使用的是微调器,那么您应该有 2. SelectListener 并获取所选项目的位置,因为微调器只得到一件事选择你有吗?
  • 得到选中项的位置后怎么办??那要检查什么??
  • 如果您获得所选项目的位置,那么您可以获得项目本身,因为您将 batchList 发送到适配器,因此您拥有它的实例。因此,每次选择它时,您都可以使用 batchList.get(position) ,因为您拥有位置本身,并且您现在拥有已选择的项目(对象)。
  • 不要直接向微调器发送响应,最好将该响应放入数组中,以便对其进行过滤,然后您可以按照一些步骤进行操作,如果您愿意,我会发布它
  • 感谢我能够获取商品数据。

标签: android kotlin spinner


【解决方案1】:

为您的微调器添加侦听器

//item selected listener for spinner
mySpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
                override fun onNothingSelected(p0: AdapterView<*>?) {
                    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
                }

                override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
                    Toast.makeText(this@MainActivity, myStrings[p2], LENGTH_LONG).show()
                }

            }

【讨论】:

  • 有时最好在 cmets 中向他们展示正确的答案,这可能会对他们有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 2011-11-20
相关资源
最近更新 更多