Estou dando prosseguimento a um projeto que faz pedido, me deparei com formatação monetária no EditText e pesquisando consegui achar uma classe e ta funcionando tranquilo aplicando a formatação nos campos de Valor unitário e Desconto.
Minha duvida deve ser daquelas bem basica mais não estou conseguindo passar adiante, com certeza deve esta me faltando o fundamental do java.
Bem no layout tenho três componentes Valor Unitário, Valor Total, Quantidade e Desconto sendo estes dois ultimos habilitados para o usuário então preciso calcular o valor Total e já consigo fazer isto porque apliquei no componente Quantidade o evento
edtQtd.addTextChangedListener(new TextWatcher()
mais no desconto eu já tenho o Listener porque tive que aplicar a mascara
edtDesconto.addTextChangedListener(MaskMonetaria.insert(edtDesconto))
como posso ter outro Listener com um proposito de calcular o valor Total ?
Provavelmente, essa classe que você está usando deve ter um método que remova a mascara. Nisso você consegue converter a String para o wrapper Double, por exemplo. Disso você consegue fazer a conta e depois é só prosseguir.
Prezado obrigado ai pela interação mais vamos lá, no campo Quantidade eu não tenho nenhum listener de formatação então usei ele para calcular o valor total exemplo digitando no campo qtd:
Qtd Op Unitario Op Desconto = Total
5 x R$ 20,00 - R$0,00 = R$100,00 Ok certo?
Agora o campo desconto ele já tem um Listener que uso para formata-lo então não tenho como ( ou não sei como fazer ) para usar a formatação monetária porque isto é necessário e ao mesmo tempo calcular o valor total
Resumindo não da pra fazer duas coisas ao mesmo tempo no mesmo Listener
como pode ver tenho já um listener para o campo o objeto edtDesconto que sua finalidade é colocar o simbolo R$ seguido do valor digitado exemplo R$10,00
Bom dia, pelo que entendi, você não está conseguindo calcular devido a máscara aplicada com R$.
Se for isso, você pode remover o ‘R$’ do campo e calcular.
Então, a mascara ou seja o R$ num é problema uma vez que no campo quantidade eu já faço uso de um listener que calcula o total
`edtQtd.addTextChangedListener(new TextWatcher() { @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
calculaTotais();
}
@Override
public void afterTextChanged(Editable s) { }
});`
talvez eu não esteja conseguindo passar o problema, mais note que o campo desconto já tem um listener que é para aplicar a formatação
então como posso chamar o meu método calculaTotais quando o usuário digitar algo neste campo uma vez que o .addTextChangedListener já esta sendo usado?
TextWatcher watcher = new TextWatcher(){
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
edtDesconto.addTextChangedListener(MaskMonetaria.insert(edtDesconto));
calculaTotais();
}
};
Junior achei uma boa ideia mais a classe que uso para a mascara ela retorna um new TextWatcher(), o código que vc sugeriu ele é um TextWatcher.
bem causou um erro, o aplicativo parou, chegou a calcular o valor total com o desconto mais causou um erro apontando para a classe MaskMonetaria na linha do ediTxt str = nf.format(Double.parseDouble(str) / 100); ediTxt.setText(str);
Acho que não tem como, o jeito para este objeto é abandonar a classe MaskMonetaria ( que como é uma classe a ideia é usar em qualquer objeto mais como preciso ir alem ou seja ter a mascara e também chamar um método) e fazer o código da mesma no objeto.