3
respostas

Listando checkboxes na tela

Oi pessoal... Como eu implemento uma lógica para que meu app mostre checkboxes marcados/desmarcados, conforme o usuário selecionar opções? Eu tenho a seguinte lógica que salva no banco de dados, mas eu não consigo excluir, apenas acrescentar a cada clique. E também não consegui aprensentar na tela os checkboxes checados depois que o usuário feche o app. Agradeço a quem puder me ajudar a escrever e entender a realização.

Código em que insiro os elementos no data base e :

class Ingles : AppCompatActivity() {

    private lateinit var rvIngles: RecyclerView
    private lateinit var checked: CheckBox

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

        rvIngles = findViewById(R.id.rv_ingles)

        val mainItemsIngles = mutableListOf<MainItems>()
        mainItemsIngles.add(
            MainItems(
                id = 1,
                textstringId = R.string.ingles_1,
            )
        )
        mainItemsIngles.add(
            MainItems(
                id = 2,
                textstringId = R.string.ingles_2,
            )
        )

        val adapter = MainAdapter(mainItemsIngles)
        rvIngles.layoutManager = LinearLayoutManager(this)
        rvIngles.adapter = adapter
    }

    private inner class MainAdapter(
        private val mainItemsIngles: MutableList<MainItems>,
    ) :
        RecyclerView.Adapter<MainAdapter.MainViewHolder>() {
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainViewHolder {
            val itemCurrentIngles = layoutInflater.inflate(R.layout.item_main_ingles, parent, false)
            return MainViewHolder(itemCurrentIngles)
        }

        override fun onBindViewHolder(holder: MainViewHolder, position: Int) {
            val itemCurrentIngles = mainItemsIngles[position]
            holder.bind(itemCurrentIngles)
        }

        override fun getItemCount(): Int {
            return mainItemsIngles.size
        }

        private inner class MainViewHolder(itemViewIngles: View) :
            RecyclerView.ViewHolder(itemViewIngles) {
            fun bind(itemCurrentIngles: MainItems) {

                val checkbox: CheckBox = itemView.findViewById(R.id.item_checkBox_ingles)

                checkbox.isChecked = itemCurrentIngles.checkBoxId
                checkbox.setText(itemCurrentIngles.textstringId)

                checkbox.setOnClickListener {
                    if (checkbox.isChecked)
                        Thread {
                            val app = application as App
                            val dao = app.db.calcDao()
                            dao.insert(
                                Calc(
                                    type = "ingles",
                                    checkBox = true,
                                )
                            )
                        }.start()

                }
         [...]
3 respostas

Jeanco, de boa ?

Só pra ver se entendi direito. O click adiciona no banco de dados essa informação, mas não tá mostrando ? Se o problema for esse talvez esteja faltando você fazer um notifyDataSetChanged para que a lista possa ser recarregada.

Sobre deletar, tu pode fazer no click a verificação do status e baseado nisso optar por deletar ou remover do banco.

Oi Matheus, obrigado por responder aqui... então, olha, eu sou bem iniciante com android, eu mal entendo o que acontece nesse código aí porque é um copia/cola de um tutorial que eu fiz. Assim: Eu sei como a lógica funciona, mas ainda estou engatinhando nos conceitos de recyclerview, room, salvar e desenhar na tela qualquer estado de qualquer "componente adicionado" ao database... Eu estou no período de teste aqui na alura justamente porque queria ver se essa parte do curso de android poderia me ajudar a entender esses conceitos com room. Assim:

Eu tenho esse repositório no github, só para fins de estudo, porque ainda estou aprendendo como funciona o room e também sobre recyclerview. Veja (se vir) que eu repeti códigos porque nem sei fazer um recyclerview genérico, e sei que vou aprender mais pra frente. Mas decidi escrever meu código mesmo assim, pra que eu possa ir praticando. Meu código: https://github.com/engsofjvolfe/editalPrfVerticalizado.git

SITUAÇÃO: O meu checkbox tem um estado de salvo quando clico nele, se eu "desclicar" e clicar de novo, ele mostra outro estado de salvo no database inspector. Eu quero que o estado anterior suma, mas eu nao sei nem como começar a escrever isso. Eu não sei o nome das coisas. E também, quando eu fecho minha tela, o checkbox não fica salvo. Eu só sei lógica de programação porque estudei no curso da faculdade, usando portugol (também estudei e fiz um monte de programa em linguagem C) então isso ajuda muito, mas é rudimentar meu conhecimento e eu iniciei no android tem poucas semanas, todos os cursos que adquiri diziam ser pra quem está do extremo zero, mas agora entendo que pelo jeito era do extremo zero no android e nao em programação kkkkkk.... e também sei os conteúdos básicos dos codelabs do google e dos cursos básicos aqui da alura que já realizei quando minha esposa tinha uma conta.

Eu queria, se pudesse, me ajudar no que escrever nessa parte do código pra mostrar na tela meu checkbox salvo mesmo quando eu fechasse o app e também como mudar o estado do checkbox pra salvo e "apagado" (no database) quando eu clicasse e desclicasse respectivamente, pra que o database não ficasse armazenando um estado de salvo a cada clique que eu fizesse.

Muito obrigado se puder ajudar

Fala Jeanco!

Cara é super comum isso mesmo, a gente no começo te que copiar e colar código até a gente se habituar com o que ele faz, é o processo de aprendizado mesmo, não tenha vergonha disso!

Cara android realmente é uma coisa chatinha, porque como voce mesmo disse, pede uma base mais sólida em conceitos de programação, principalmente orientação a objetos, sem ela tudo vai ficar mais complicado, se tiver a oportunidade de conseguir estudar a base antes, vai ser bom!

Acho que a primeira coisa que a gente precisa entender é que no caso você tá criando um objeto/instância nova que tá indo para o banco de dados mas em canto nenhum tu reutiliza ela, eu partiria desse ponto, talvez valha a pena refatorar o código e o modelo para que ele contenha essa informação, assim vai ser mais fácil de você manipular o dado e quando abrisse o app teria as coisas ainda.