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

Dúvida no campo Nota

Olá, fiquei com uma dúvida, no campo Nota!

Nós criamos este item no objeto na tabela como REAL, manipulamos com double e setamos no campo editText, com o setProgress e ele aceita apenas o valor int. Quando eu insiro uma nota quebrada, ao acessar o aluno, com nota "quebrada", ele me mostra o nota "cheia". Sem a meia estrela.

------------ EDITADO ------------

Rating bar - arquivo xml

<RatingBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:max="10"
            android:numStars="5"
            android:id="@+id/formulario_nota"/>

Método preencheFormulario

campoNota.setProgress(aluno.getNota().intValue());

FormularioHelper

public class FormularioHelper {

    private final EditText campoNome;
    private final EditText campoEndereco;
    private final EditText campoTelefone;
    private final EditText campoSite;
    private final RatingBar campoNota;

    private Aluno aluno;

    public FormularioHelper(FormularioActivity activity){
        campoNome = (EditText) activity.findViewById(R.id.formulario_nome);
        campoEndereco = (EditText) activity.findViewById(R.id.formulario_endereco);
        campoTelefone = (EditText) activity.findViewById(R.id.formulario_telefone);
        campoSite = (EditText) activity.findViewById(R.id.formulario_site);
        campoNota = (RatingBar) activity.findViewById(R.id.formulario_nota);
        Log.i("Agenda", "FormularioHelper - campoNota: " + campoNota.getProgress());
        aluno = new Aluno();
    }

    public Aluno pegaAluno() {
        aluno.setNome(campoNome.getText().toString());
        aluno.setEndereco(campoEndereco.getText().toString());
        aluno.setTelefone(campoTelefone.getText().toString());
        aluno.setSite(campoSite.getText().toString());
        aluno.setNota(Double.valueOf(campoNota.getProgress()));
        Log.i("Agenda", "pegaAluno - aluno: " + aluno.getNota());

        return aluno;
    }

    public void preencheFormulario(Aluno aluno) {
        campoNome.setText(aluno.getNome());
        campoEndereco.setText(aluno.getEndereco());
        campoTelefone.setText(aluno.getTelefone());
        campoSite.setText(aluno.getSite());
        campoNota.setProgress(aluno.getNota().intValue());
        Log.i("Agenda", "preencheFormulario - campoNota: " + campoNota.getProgress());
        this.aluno = aluno;
    }
}

Inseri alguns logs, o que acontece é seguinte:

Quando eu insiro 2 estrelas e meia, da escala de 10, a nota em inteiros fica no valor 5. Até aí , tudo ok!

Porém na exibição, mesmo trazendo este valor de 5, na tela do celular, aparecem 3 estrelas. Ao salvar, sem fazer alterações, ele registra o valor de 6.

Anteriormente, pensei que o problema eram os valores quebrados, mas na realidade a exibição dele está incorreta.

Como posso corrigir isto?

Obrigado!

9 respostas

Oi Rodrigo, tudo bem ?

Cara acabei de dar uma olhadinha aqui na documentação e vi esse método bacana aqui :

https://developer.android.com/reference/android/widget/RatingBar.html#setRating(float)

Imagino que ele deva solucionar seu problema.

Abraços

Eae Rodrigo, tudo certo?

Já conseguiu resolver seu problema?

Se não, como você está está setando e pegando o valor no seu helper?

Boa noite! Tudo bem?

Ainda estou com problemas, atualizei minha pergunta, se puderem me ajudar, ficarei muito grato! =)

Entendi, tente dar uma conferida se o dado está correto no banco.

Olá Rodrigo você poderia postar como que tá seu código da classe FormularioHelper, acredito que seja lá a questão.

Maison, bom dia!

Postei minha classe FormularioHelper. Mas acabei de testar em um emulador, com a versão 6 do android e funcionou.

Meu celular ainda está na versão 4.4.2. Acredito que seja um problema de versão . Sabe me dizer se existe alguma forma de contornar este problema?

Obrigado!

Oi Rodrigo acredito que o problema não era de API, pode ser algum cast que você tenha ajeitado, Deixa eu verificar se entendi: * Funcionou no emulador e não funcionou no celular ? Colocou uma nota quebrada no emulador e depois ao editar apareceu quebrada e no celular não? Foi isso?

Maison, bom dia! Exatamente, eu não mudei o código fonte, apenas testei no celular e no emulador, efetuando o mesmo processo

No celular (android: 4.4.2) não funcionou. No emulador (android: 6) funcionou.

Fiz algumas buscas, mas ainda sem resposta, se é problema de versão do android. Obrigado!

solução!

Oi Rodrigo o correto pra trabalhar com Rating Bar como bem frisou nosso colega Matheus é o método da própria classe deel getRating();

android:rating

The rating to set by default.

Must be a floating point value, such as "1.2".

This may also be a reference to a resource (in the form "@[package:]type:name") or theme attribute (in the form "?[package:][type:]name") containing a value of this type.

This corresponds to the global attribute resource symbol rating.

Uma vez que a nota pode ser quebrada. No curso é usado o getProgress():

https://developer.android.com/reference/android/widget/ProgressBar.html#getProgress()

que retorna int aí começa o problema e termina quando vc tenta puxar um cadastrado pra alterar.

Então pra funcionar sem problemas onde for, troca pra

aluno.setNota((double) campoNota.getRating());

Ficando assim o método completo:

 public Aluno pegaAluno() {
        aluno.setNome(campoNome.getText().toString());
        aluno.setEndereco(campoEndereco.getText().toString());
        aluno.setTelefone(campoTelefone.getText().toString());
        aluno.setSite(campoSite.getText().toString());
        aluno.setNota((double) campoNota.getRating());));
        Log.i("Agenda", "pegaAluno - aluno: " + aluno.getNota());

        return aluno;
    }