【问题标题】:Android Kotlin how do I add JSON data into spinner/drop down?Android Kotlin 如何将 JSON 数据添加到微调器/下拉菜单中?
【发布时间】:2021-03-17 12:09:08
【问题描述】:

我正在尝试将 JSON 数据放入微调器中,例如将衣服尺寸放入下拉菜单中

  val product_sizes = productfeed.variants.distinctBy { it.option_values[0].name }.forEach{Log.d("TAG", "TESTING:: ${it.option_values[0].name}")}

这是使用 Logcat 上的输出从 JSON 数据中获取大小:

测试:: 小 测试:: 中等 测试:: 大 测试:: 1 XL 测试:: 2 XL 测试:: 3 XL

但我无法将其放入微调器中

  if (spinner_product != null) {
        val adapter =
            ArrayAdapter(this@ProductActivity, android.R.layout.simple_spinner_item,
                **sizes**)
        spinner_product.adapter = adapter

        //  Log.d("SPINNER", "this is ${spinner_product.display.state}")

        spinner_product.onItemSelectedListener =
            object : AdapterView.OnItemSelectedListener {
                override fun onItemSelected(
                    parent: AdapterView<*>?,
                    view: View?,
                    position: Int,
                    id: Long
                ) {
                    Toast.makeText(this@ProductActivity,
                        " " + "" + productfeed.variants[position].option_values[0].name,
                        Toast.LENGTH_SHORT).show()
                    size_text.text = sizes[position]

                }

                override fun onNothingSelected(parent: AdapterView<*>?) {
                    TODO("Not yet implemented")
                }
            }

【问题讨论】:

  • 有什么问题?
  • 每当我将它放入微调器时,它只会显示为“kotlin.unit”,我不知道如何将 JSON 数据放入微调器中

标签: android json kotlin spinner dropdown


【解决方案1】:

问题是您的ArrayAdapter 正在使用productfeed.variants 的任何自定义类。因此,为了让它正确显示在您的微调器中,您可以简单地覆盖 toString() 类上的 toString() 方法,即:

data class YourClassName(
    val name: String
) {
     override fun toString(): String = name
}

ArrayAdapter

默认情况下,数组适配器通过调用创建视图 Object#toString() 在您提供的集合中的每个数据对象上, 并将结果放在 TextView 中。

或者,您可以创建自定义 ArrayAdapter 并覆盖 getView() 并将视图设置为您想要的;

val adapter = object : ArrayAdapter<YourClass>(this, android.R.layout.simple_spinner_item, variants) {
        override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
            val view = super.getView(position, convertView, parent)
            val text1 = view.findViewById(android.R.id.text1) as TextView    
            text1.setText(variants[position].name) 
            return view
        }
    }

【讨论】:

    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2022-11-20
    • 1970-01-01
    相关资源
    最近更新 更多