微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我的微调器不显示所选项目

如何解决为什么我的微调器不显示所选项目

我的活动中有一个微调器,它从一次齐射呼叫中获取数据。数据显示在微调器中。但是当我点击微调器中的特定项目时,它会显示

微调代码

private fun spinner() {

    val spinner = findViewById<Spinner>(R.id.report2Spinner)
    if (spinner != null) {
        val arrayAdapter = ArrayAdapter(this,android.R.layout.simple_spinner_dropdown_item,companyList)
        spinner.adapter = arrayAdapter
        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>?,view: View?,position: Int,id: Long) {
                selectedItem = spinner.getItemAtPosition(position).toString()
                Toast.makeText(this@Report2Activity,selectedItem,Toast.LENGTH_SHORT).show()
                spinner.setSelection(position)
            }

            override fun onnothingSelected(parent: AdapterView<*>) {

            }
        }
    }
}

声明保存截击数据的数组

var companyList: ArrayList = ArrayList()

凌空呼唤

private fun jsonGetCompany() {
    //Declaring URL for JSON file
    val url = "https://mist.zp.co.za:6502/MIST.svc/CMP/M@H\$@203@R"

    val request = JsonObjectRequest(
            Request.Method.GET,url,null,{ response ->
                try {
                    val jsonArray = response.getJSONArray("Table")
                    for (i in 0 until jsonArray.length()) {
                        //Adding variables to JSONArray
                        val item = jsonArray.getJSONObject(i)
                        companyList.add(item.getString("Company"))
                    }
                } catch (e: JSONException) {
                    e.printstacktrace()
                }
            },{ error -> error.printstacktrace() })
    //Adding request to the queue
    requestQueue?.add(request)
    //Setting timeout and retries
    request.retryPolicy = DefaultRetryPolicy(30000,3,1f)
}

Before choosing

While Choosing

After Choosing

这是我调用 spinner() 和 jsonGetCompany() 的 onCreate

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_report2)
    title = "Report 2"


    //Initialising Recyclerview
    recyclerViewReport2 = findViewById(R.id.recyclerViewReport2)
    val linearlayoutmanager = linearlayoutmanager(applicationContext)
    recyclerViewReport2.layoutManager = linearlayoutmanager

    //Declaring Volley requestQueue for JSON calls
    requestQueue = Volley.newRequestQueue(this)

    //Using JSON request function
    jsonGetCompany()
    spinner()

    val fromDatePicker: DatePicker = findViewById(R.id.report2FromDatePicker)
    val endDatePicker: DatePicker = findViewById(R.id.report2EndDatePicker)

    val buttonLoad: Button = findViewById(R.id.buttonLoad)
    buttonLoad.setonClickListener {
        fromDate = "${fromDatePicker.year}-${fromDatePicker.month + 1}-${fromDatePicker.dayOfMonth}"
        endDate = "${endDatePicker.year}-${endDatePicker.month + 1}-${endDatePicker.dayOfMonth}"
        Toast.makeText(this,"Company is: $selectedItem",Toast.LENGTH_SHORT).show()
        jsonRequestReport2Data()

        if (recyclerViewReport2.isNotEmpty()) {
            company.clear()
            report2Adapter.notifyDataSetChanged()
        }
    }
 }

解决方法

编辑:这是因为 jsonGetCompany()spinner() 被同时调用,但 volley 异步工作。您应该在 volley 从服务器获取数据后设置适配器。从活动中调用此服务器调用不是正确的方法,但它是完全不同的主题。您可以简单地编辑您的代码,如:

 try {
      val jsonArray = response.getJSONArray("Table")
      for (i in 0 until jsonArray.length()) {
      //Adding variables to JSONArray
           val item = jsonArray.getJSONObject(i)
           companyList.add(item.getString("Company"))
      }
      setSpinner()
 } catch (e: JSONException) {
     e.printStackTrace()
 }

很高兴能帮上忙。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。