为什么我的微调器不显示所选项目
Why does my spinner not displaying selected item
我的 activity 中有一个微调器,它从凌空调用中获取数据。数据显示在微调器中。但是当我点击微调器中的特定项目时,它确实会显示。
旋转器代码
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)
}
这是我调用 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 从服务器获取数据后设置适配器。从 activity 调用此服务器调用不是正确的方法,但它是完全不同的主题。您可以像这样简单地编辑您的代码:
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()
}
很高兴我能帮上忙。
我的 activity 中有一个微调器,它从凌空调用中获取数据。数据显示在微调器中。但是当我点击微调器中的特定项目时,它确实会显示。
旋转器代码
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)
}
这是我调用 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 从服务器获取数据后设置适配器。从 activity 调用此服务器调用不是正确的方法,但它是完全不同的主题。您可以像这样简单地编辑您的代码:
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()
}
很高兴我能帮上忙。