从Spinner获取数据并转换为数字-Kotlin



我正在Kotlin中编写一个简单的android应用程序。功能如下:用户输入信息,程序计算他的工资。困在从微调器获取信息上。假设有12个月,用户从Spinner列表中选择一月,我需要将他的选择转换为数字31(天数(,然后将这些数据用于计算器。
第一个问题是如何创建"当";语句,并将所选数据转换为数字。
2第二个问题如何在我有趣的计算中使用/获得这些数字Salary((

主要活动:

private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.calculateButton.setOnClickListener { calculateSalary() }
binding.baseSalaryEditText.setOnKeyListener { view, keyCode, _ ->
handleKeyEvent(
view,
keyCode
)
}
val spinner: Spinner = findViewById(R.id.month)

// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter.createFromResource(
this,
R.array.month_array,
android.R.layout.simple_spinner_item
).also { adapter ->
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
// Apply the adapter to the spinner
spinner.adapter = adapter
}
}
abstract class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
// An item was selected. You can retrieve the selected item using
// parent.getItemAtPosition(pos)
}
override fun onNothingSelected(parent: AdapterView<*>) {
// Another interface callback
}

}
private fun calculateSalary() {
val stringInTextField = binding.baseSalaryEditText.text.toString()
val base = stringInTextField.toDoubleOrNull()
if (base == null || base == 0.0) {
displaySalary(0.0)
return
}
val stringInTextField2 = binding.workingDaysEditText.text.toString()
val workingDays = stringInTextField2.toDoubleOrNull()
if (workingDays == null || workingDays == 0.0) {
displaySalary(0.0)
return
}

// here will be formula  = base / monthDays * workingDays
var salary = base
displaySalary(salary)
}
private fun displaySalary(salary: Double) {
val formattedTip = NumberFormat.getCurrencyInstance().format(salary)
binding.totalResult.text = getString(R.string.salary_amount, formattedTip)
}
private fun handleKeyEvent(view: View, keyCode: Int): Boolean {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
// Hide the keyboard
val inputMethodManager =
getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
return true
}
return false
}
}

因此,您要做的是将微调器中的12个条目中的每一个与引用日期的int数字链接起来。列出12个条目,每个条目包含当月的天数。然后使用以下代码:

var months: List =  arrayOf("30", "28", "31", "30", "30", "31")
var days: Int  = 0 //this will be the month picked converted into days
spinnerMonth.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {

days = months[p2].toInt() //p2 is the position selected in the spinner
calculateSalary(days)
}
override fun onNothingSelected(p0: AdapterView<*>?) {
}

}

您现在应该能够获得天数并将其发送给您通过-calculateSalary(days)

最新更新