Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Recuperar valor salvo de um spinner

Galera, eu fiz uma aplicação que está quase totalmente funcional, ao editar eu não estou conseguindo recuperar o valor salvo de uma tabela no sqlite, segue meu código helperConsumo.kt(preenche no formulário os dados de uma tabela)

 fun preencheConsumo(consumo: Consumo){
        campoKmAnterior.setText(consumo.kmAnterior)
        campoKmAtual.setText(consumo.kmAtual)
        campoLitros.setText(consumo.litros)
        val converter = consumo.data!!.split("-")
        val ano = converter[0]
        val mes = converter[1]
        val dia = converter[2]
        campoData.setText("$dia/$mes/$ano")
        campoCombustivel.setSelection((campoCombustivel.getAdapter() as? ArrayAdapter<String>)!!.getPosition(consumo.combustivel))
        campoTanqueCheio.isChecked = consumo.tanqueCompleto == 1
        this.consumo = consumo

    }

ConsumoActivity.kt(Onde eu criei a lista para botar no spinner)

val spinner = findViewById<Spinner>(R.id.combustivel)

        spinner.onItemSelectedListener

        val listaSpinner = ArrayList<String>()
        listaSpinner.add("Gasolina Comum")
        listaSpinner.add("Gasolina Aditivada")
        listaSpinner.add("Etanol")
        listaSpinner.add("Diesel")

        val adapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listaSpinner)
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)

        spinner.adapter = adapter
3 respostas

Guilherme, você tem algumas formas de pegar o valor do Spinner, vou te dar alguns exemplos e você vê se algum deles se encaixa na sua necessidade

  • Você pode ter um Listener no Spinner, e toda vez que o usuário selecionar um dos itens, você vai " pegar" o valor (a partir dai, você pode guardar em uma variável, ou sei lá, fazer oque quiser com ele kkk)
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val listaSpinner = arrayOf("Gasolina Comum", "Gasolina Aditivada", "Etanol", "Diesel")

        val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, listaSpinner)
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = adapter

        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
                posicao = parent.getItemAtPosition(position).toString()

                Toast.makeText(this@MainActivity, "Item Selecionado = ${parent.getItemAtPosition(position)}", Toast.LENGTH_SHORT)
                    .show()
            }

            override fun onNothingSelected(parent: AdapterView<*>) {
            }
        }
    }
}
  • Pegar a posição selecionada, e comparar com a sua lista
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val listaSpinner  = arrayOf("Gasolina Comum", "Gasolina Aditivada", "Etanol", "Diesel")

        val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, listaSpinner )
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = adapter

        button_teste.setOnClickListener{
            Toast.makeText(this, "Item Selecionado = ${listaSpinner[spinner.selectedItemPosition]}", Toast.LENGTH_SHORT).show()
        }
    }
}
  • Usar a referência do spinner para pegar o adapter, e a posição do item. (Lembra um pouco a sua construção)
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val listaSpinner  = arrayOf("Gasolina Comum", "Gasolina Aditivada", "Etanol", "Diesel")

        val adapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, listaSpinner )
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
        spinner.adapter = adapter

        button_teste.setOnClickListener{
            Toast.makeText(this, "Item Selecionado = ${spinner.adapter.getItem(spinner.selectedItemPosition)}", Toast.LENGTH_SHORT).show()
        }
    }
}

Com certeza existem mais formas de fazer isto, e formas mais sucintas de escrever em Kotlin (isso sempre tem kkk).

Avisa aqui se solucionou sua dúvida, beleza

abç

solução!

Opa, acabei de solucionar, o problema foi bem bobo hehe, eu estava criando a lista depois de verificar se era edição ou inclusão, hehe Função que pega os dados do consumo a ser editado

        fun preencheConsumo(consumo: Consumo){
        campoKmAnterior.setText(consumo.kmAnterior)
        campoKmAtual.setText(consumo.kmAtual)
        campoLitros.setText(consumo.litros)
        val converter = consumo.data!!.split("-")
        val ano = converter[0]
        val mes = converter[1]
        val dia = converter[2]
        campoData.setText("$dia/$mes/$ano")

        campoCombustivel.setSelection((campoCombustivel.getAdapter() as? ArrayAdapter<String>)!!.getPosition(consumo.combustivel))

        campoTanqueCheio.isChecked = consumo.tanqueCompleto == 1
        this.consumo = consumo

    }

Criação do spinner e verificação se é inclusão ou edição

 val listaSpinner = ArrayList<String>()
        listaSpinner.add("Gasolina Comum")
        listaSpinner.add("Gasolina Aditivada")
        listaSpinner.add("Etanol")
        listaSpinner.add("Diesel")

        val adapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listaSpinner)
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)

        spinner.adapter = adapter


        if (editar != null){
            helper.preencheConsumo(editar as Consumo)
        } else if (editar == null && listaConsumo.isNotEmpty()){
            val kmAnterior = findViewById<TextView>(R.id.kmAnterior)
            kmAnterior.setText(listaConsumo.last().kmAtual)
        }

Legal que conseguiu resolver seu problema Guilherme, se surgir mais alguma dúvida é só perguntar aqui, beleza

Não esquece de marcar sua resposta como solução e encerra o tópico

abç