Meus amigos, tenho um spinner que calcula desconto em % de 1 a 5. Como faço para calcular o desconto ao clicar no valor da porcentagem de desconto no spinner?
double desconto = 0, novo_val = 0;
desconto = Double.parseDouble(ValorUnitario.getText().toString());
switch(spnDesconto.getSelectedItemPosition()){
case 0: novo_val = desconto - (desconto * 0.01);break;
case 1: novo_val = desconto - (desconto * 0.02);break;
case 2: novo_val = desconto - (desconto * 0.03);break;
case 3: novo_val = desconto - (desconto * 0.04);break;
case 4: novo_val = desconto - (desconto * 0.05);break;
}
AlertDialog.Builder dialogo = new AlertDialog.Builder(Vendas.this);
dialogo.setTitle("Novo Valor");
dialogo.setMessage("O valor com desconto é: R$ " + String.valueOf(novo_val));
dialogo.setNeutralButton("OK", null);
dialogo.show();
Coloque o seu trecho de código dentro do Listener abaixo
[code]spnDesconto.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
// Seu código aqui
}
public void onNothingSelected(AdapterView<?> parent) {
// Nenhuma opção selecionada
}
});
}[/code]
O ideal é colocar esse trecho de código acima, após o “spnDesconto.setAdapter(adapter)” que você deve ter no seu código.
ok, obrigado pelo retorno. Vou testar.
Fiz assim e deu esse erro:
spnDesconto.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
double desconto = 0, novo_val = 0;
desconto = Double.parseDouble(ValorUnitario.getText().toString());
switch(spnDesconto.getSelectedItemPosition()){
case 0: novo_val = desconto - (desconto * 0.01);break;
case 1: novo_val = desconto - (desconto * 0.02);break;
case 2: novo_val = desconto - (desconto * 0.03);break;
case 3: novo_val = desconto - (desconto * 0.04);break;
case 4: novo_val = desconto - (desconto * 0.05);break;
}
AlertDialog.Builder dialogo = new AlertDialog.Builder(Vendas.this);
dialogo.setTitle("Novo Valor");
dialogo.setMessage("O valor com desconto é: R$ " + String.valueOf(novo_val));
dialogo.setNeutralButton("OK", null);
dialogo.show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
08-29 18:47:47.363: E/AndroidRuntime(340): FATAL EXCEPTION: main
08-29 18:47:47.363: E/AndroidRuntime(340): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.br.aquavendas/com.br.aquavendas.Vendas}: java.lang.NumberFormatException:
Em qual linha o erro indicado?
O erro indica que o número que você tá passando não é válido, isso pode acontecer quando você tenta colocar dentro de uma variável um valor maior que o suportado.
O estranho é que está funcionando.
O erro acima citado foi solucionado.
Como que deixo com duas casas depois do ponto?
Tipo: R$ xx.xx
Resolvido a duvida das duas casas decimais
String valor = String.format("%.2f", novo_val);
ValorDesconto.setText(String.valueOf(valor));
Mais uma dúvida, gostaria que não calculasse logo que mostrasse a tela, está calculando com 1%, queria que mostrasse o valor normal sem desconto.
Poste o código do seu método onCreate();
Segue onCreate
public class Vendas extends Activity { // Início da Classe CadastrarCliente
private static final String[] desconto = {"0%","1%","2%","3%","4%","5%"};
ArrayAdapter<String> aDesconto;
Spinner spnDesconto;
private long mId;
// private EditText Nome, Placa, Modelo;
private TextView IdCodigoCliente, NomeCliente, IdProduto, NomeProduto, DataVenda, ValorUnitario, ValorDesconto;
private ImageButton salvar, pesquisar, limpar, voltar;
private Button Produtos;
private DbAdapter mDb;
@Override
protected void onCreate(Bundle icicle){ // Início do método onCreate
super.onCreate(icicle);
setContentView(R.layout.vendas);
mDb = new DbAdapter(this);
mId = getIntent().getLongExtra(DbAdapter.KEY_IDCLI, 0);
Log.d("CadastrarCarro", "O mId é: " + mId); //aqui
mId = getIntent().getLongExtra(DbAdapter.KEY_IDPRO, 0);
Log.d("CadastrarCarro", "O mId é: " + mId); //aqui
IdCodigoCliente = (TextView) findViewById(R.id.IdCliente);
NomeCliente = (TextView) findViewById(R.id.lblNomeCliente);
DataVenda = (TextView) findViewById(R.id.lblDataVenda);
IdProduto = (TextView) findViewById(R.id.IdProduto);
NomeProduto = (TextView) findViewById(R.id.lblNomeProduto);
ValorUnitario = (TextView) findViewById(R.id.lblValor);
spnDesconto = (Spinner) findViewById(R.id.spnDesconto);
ValorDesconto = (TextView) findViewById(R.id.lblValorDesconto);
aDesconto = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, desconto);
spnDesconto.setAdapter(aDesconto);
SimpleDateFormat simpleFormat = new SimpleDateFormat("dd/MM/yyyy");
// Log.w("Data Atual", simpleFormat.format( new Date( System.currentTimeMillis() ) );
DataVenda.setText(simpleFormat.format( new Date( System.currentTimeMillis() )) );
mDb.open();
Cursor cliente = mDb.getCliente(mId);
Cursor produto = mDb.getProduto(mId);
if(mId > 0 && cliente.moveToFirst()){
IdCodigoCliente.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_IDCLI)));
//cliente.close();
Log.d("CarrosCliente", "mId: " + mId); // e aqui
NomeCliente.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_RAZAOSOCIALNOME)));
}
// PRODUTO
if(mId > 0 && produto.moveToFirst()){
IdProduto.setText(produto.getString(produto.getColumnIndex(DbAdapter.KEY_IDPRO)));
// produto.close();
Log.d("CarrosCliente", "mId: " + mId); // e aqui
NomeProduto.setText(produto.getString(produto.getColumnIndex(DbAdapter.KEY_PRODUTO)));
ValorUnitario.setText(produto.getString(produto.getColumnIndex(DbAdapter.KEY_VALORUNITARIO)));
}
spnDesconto.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
double desconto = 0, novo_val = 0;
desconto = Double.parseDouble(ValorUnitario.getText().toString());
switch(spnDesconto.getSelectedItemPosition()){
case 0: novo_val = desconto - (desconto * 0.00);break;
case 1: novo_val = desconto - (desconto * 0.01);break;
case 2: novo_val = desconto - (desconto * 0.02);break;
case 3: novo_val = desconto - (desconto * 0.03);break;
case 4: novo_val = desconto - (desconto * 0.04);break;
case 5: novo_val = desconto - (desconto * 0.05);break;
}
String valor = String.format("%.2f", novo_val);
ValorDesconto.setText(String.valueOf(valor));
/*
AlertDialog.Builder dialogo = new AlertDialog.Builder(Vendas.this);
dialogo.setTitle("Novo Valor");
dialogo.setMessage("O valor com desconto é: R$ " + String.valueOf(novo_val));
dialogo.setNeutralButton("OK", null);
dialogo.show();
*/
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
Produtos = (Button) findViewById(R.id.btnProduto);
Produtos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Vendas.this, ListaProdutos.class);
intent.putExtra("itemMenu", "3 - Listar Produtos");
startActivity(intent);
// Intent intent = new Intent(Vendas.this, ListaProdutos.class);
// startActivity(intent);
// startActivity(new Intent(Vendas.this,ListaProdutos.class));
}
});
} // Fim do método onCreate
Teria algum jeito melhor pra fazer isso? Está dando erro quando vai setar o resultado no textview. Uma outra coisa que está acontecendo é que quando entra na tela já está calculando o desconto com 1%, tive que colocar o valor 0% no array para não calcular.
Alguém poderia me ajudar a fazer o cálculo de desconto em % utilizando um spinner? Seto um textview com um valor e gostaria que ao clicar no spinner, fizesse o cálculo de acordo com a % escolhida.
A Classe está assim:
package com.br.aquavendas;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.br.aquavendas.banco.DbAdapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Spinner;
import android.widget.TextView;
public class Vendas extends Activity { // Início da Classe CadastrarCliente
private static final String[] desconto = {"0%","1%","2%","3%","4%","5%"};
ArrayAdapter<String> aDesconto;
// Spinner spnDesconto;
private long mId;
// private EditText Nome, Placa, Modelo;
private TextView IdCodigoCliente, NomeCliente, IdProduto, NomeProduto, DataVenda, ValorUnitario, ValorDesconto;
private ImageButton salvar, pesquisar, limpar, voltar;
private Button Produtos, Clientes;
private DbAdapter mDb;
@Override
protected void onCreate(Bundle icicle){ // Início do método onCreate
super.onCreate(icicle);
setContentView(R.layout.vendas);
mDb = new DbAdapter(this);
mId = getIntent().getLongExtra(DbAdapter.KEY_IDCLI, 0);
Log.d("CadastrarCarro", "O mId é: " + mId); //aqui
mId = getIntent().getLongExtra(DbAdapter.KEY_IDPRO, 0);
Log.d("CadastrarCarro", "O mId é: " + mId); //aqui
IdCodigoCliente = (TextView) findViewById(R.id.IdCliente);
NomeCliente = (TextView) findViewById(R.id.lblNomeCliente);
DataVenda = (TextView) findViewById(R.id.lblDataVenda);
IdProduto = (TextView) findViewById(R.id.IdProduto);
NomeProduto = (TextView) findViewById(R.id.lblNomeProduto);
ValorUnitario = (TextView) findViewById(R.id.lblValor);
// spnDesconto = (Spinner) findViewById(R.id.spnDesconto);
ValorDesconto = (TextView) findViewById(R.id.lblValorDesconto);
aDesconto = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, desconto);
// spnDesconto.setAdapter(aDesconto);
SimpleDateFormat simpleFormat = new SimpleDateFormat("dd/MM/yyyy");
// Log.w("Data Atual", simpleFormat.format( new Date( System.currentTimeMillis() ) );
DataVenda.setText(simpleFormat.format( new Date( System.currentTimeMillis() )) );
mDb.open();
Cursor cliente = mDb.getCliente(mId);
Cursor produto = mDb.getProduto(mId);
if(mId > 0 && cliente.moveToFirst()){
IdCodigoCliente.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_IDCLI)));
//cliente.close();
Log.d("CarrosCliente", "mId: " + mId); // e aqui
NomeCliente.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_RAZAOSOCIALNOME)));
cliente.close();
}
// PRODUTO
if(mId > 0 && produto.moveToFirst()){
IdProduto.setText(produto.getString(produto.getColumnIndex(DbAdapter.KEY_IDPRO)));
// produto.close();
Log.d("CarrosCliente", "mId: " + mId); // e aqui
NomeProduto.setText(produto.getString(produto.getColumnIndex(DbAdapter.KEY_PRODUTO)));
ValorUnitario.setText(produto.getString(produto.getColumnIndex(DbAdapter.KEY_VALORUNITARIO)));
produto.close();
}
/*
spnDesconto.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
double desconto = 0, novo_val = 0;
desconto = Double.parseDouble(ValorUnitario.getText().toString());
switch(spnDesconto.getSelectedItemPosition()){
case 0: novo_val = desconto - (desconto * 0.00);break;
case 1: novo_val = desconto - (desconto * 0.01);break;
case 2: novo_val = desconto - (desconto * 0.02);break;
case 3: novo_val = desconto - (desconto * 0.03);break;
case 4: novo_val = desconto - (desconto * 0.04);break;
case 5: novo_val = desconto - (desconto * 0.05);break;
}
String valor = String.format("%.2f", novo_val);
ValorDesconto.setText(String.valueOf(valor));
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
*/
Clientes = (Button) findViewById(R.id.btnClientes);
Clientes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Vendas.this, Lista.class);
intent.putExtra("itemMenu", "2 - Listar Clientes");
startActivity(intent);
}
});
Produtos = (Button) findViewById(R.id.btnProduto);
Produtos.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Vendas.this, ListaProdutos.class);
intent.putExtra("itemMenu", "3 - Listar Produtos");
startActivity(intent);
}
});
} // Fim do método onCreate
public void mensagemExibir(String titulo, String texto){
AlertDialog.Builder mensagem = new AlertDialog.Builder(Vendas.this);
mensagem.setTitle(titulo);
mensagem.setMessage(texto);
mensagem.setNeutralButton("Ok", null);
mensagem.show();
}
} // Fim da Classe CadastrarClientes