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
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)