Calcular valor no click do spinner

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.

Alguém?

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