Como utilizar a classe TextWatcher para alterar para edits diferentes AndroidStudio 3.0??

05/12/2017

0

A situação é a seguinte.. se alterado o edit descontoValor devera ser alterado na tela os edit descontoPorcentagem e totalComDesconto
ja implemento essa funcao para a quantidade e o descontoValor, portanto ao implementar para o descontoPorcentagem me deparo com um erro de recursividade lembrando que se utilizo uma das duas funcoes faz exatamente o que quero e preciso que funcione tanto pro valor quando pra porcentagem.

No metodo onCreate chamo as funcoes
changeQuantidade();
changeDesconto();
changeDescontoPorcentagem();

segue as funcoes com os TextWatcher
//Alteracao de Quantidade
private void changeQuantidade() {
final EditText etQuantidade = (EditText) findViewById(R.id.etQuantidade);
etQuantidade.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void afterTextChanged(Editable s) {

String qtde = String.valueOf(s).toString().trim();
addItemPedidoHelper.recalculaChangeQtde(qtde);
}
});
}
// change do descontoValor
private void changeDesconto() {
final EditText etDesconto = (EditText) findViewById(R.id.etDesconto);
TextWatcher watcherDesconto = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void afterTextChanged(Editable editable) {
if (editable == etDesconto){
String desconto = String.valueOf(editable).toString().trim();
addItemPedidoHelper.recalculaChangeDesconto(desconto);
}

}
};


etDesconto.addTextChangedListener(watcherDesconto);
}
//descontoPorcentagem
private void changeDescontoPorcentagem() {
EditText etDescontoPorcentagem = (EditText) findViewById(R.id.etDescontoPorcentagem);
TextWatcher watcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void afterTextChanged(Editable s) {
String descontoPorcentagem = String.valueOf(s).toString().trim();
addItemPedidoHelper.recalculaChangeDescontoPorcentagem(descontoPorcentagem);
}
};
etDescontoPorcentagem.addTextChangedListener(watcher);
}

Funcoes addItemPedidoHelper
public void recalculaChangeDescontoPorcentagem(String descontoPorcentagem) {
String sQtde = campoQuantidade.getText().toString();


if (sQtde.equals("")) {
campoTotal.setText("0");
campoTotalSemDesconto.setText("0");
} else {
//Total
Double qtde = Double.parseDouble(sQtde);
Double preco = Double.parseDouble(campoPreco.getText().toString());
Double totalSemDesconto = Double.parseDouble(util.aproximar(qtde * preco));


//Total com desconto
if (!descontoPorcentagem.equals("")) {

Double valorDesconto = (Double.parseDouble(String.valueOf(totalSemDesconto)) * Double.parseDouble(descontoPorcentagem)/ 100);
Double totalComDesconto = Double.parseDouble(util.aproximar(totalSemDesconto - valorDesconto));

campoDesconto.setText(valorDesconto.toString());
campoTotalSemDesconto.setText(totalSemDesconto.toString());
campoTotal.setText(totalComDesconto.toString());
} else {
campoTotalSemDesconto.setText(totalSemDesconto.toString());
campoTotal.setText(totalSemDesconto.toString());
}
}
public void recalculaChangeDesconto(String desconto) {

String sQtde = campoQuantidade.getText().toString();


if (sQtde.equals("")) {
campoTotal.setText("0");
campoTotalSemDesconto.setText("0");
} else {
//Total
Double qtde = Double.parseDouble(sQtde);
Double preco = Double.parseDouble(campoPreco.getText().toString());
Double totalSemDesconto = Double.parseDouble(util.aproximar(qtde * preco));


//Total com desconto
if (!desconto.equals("")) {
Double totalComDesconto = Double.parseDouble(util.aproximar(totalSemDesconto - Double.parseDouble(desconto)));
Double porcentagem = (Double.parseDouble(desconto) * 100 / totalSemDesconto );
campoDescontoPorcentagem.setText(porcentagem.toString());
campoTotalSemDesconto.setText(totalSemDesconto.toString());
campoTotal.setText(totalComDesconto.toString());
} else {
campoTotalSemDesconto.setText(totalSemDesconto.toString());
campoTotal.setText(totalSemDesconto.toString());
}
}
}
public void recalculaChangeQtde(String qtde) {

if (qtde.equals("")) {
campoTotalSemDesconto.setText("0");
campoTotal.setText("0");
} else {
String sDesconto = campoDesconto.getText().toString();
Double preco = Double.parseDouble(campoPreco.getText().toString());
Double quantidade = Double.parseDouble(qtde);
Double totalSemDesconto = Double.parseDouble(util.aproximar(quantidade * preco));

campoTotalSemDesconto.setText(totalSemDesconto.toString());

if (!sDesconto.equals("")) {
Double desconto = Double.parseDouble(sDesconto);
Double totalComDesconto = Double.parseDouble(util.aproximar(totalSemDesconto - desconto));
campoTotal.setText(totalComDesconto.toString());
} else {
campoTotal.setText(totalSemDesconto.toString());
}
}
}
lembrando que se comento a funcao
changeDesconto() ou changeDescontoPorcentagem(); o codigo compila e executa como o esperado
Vinicius Paulino

Vinicius Paulino

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar