Boa tarde
Pesquisei bastante, inclusive aqui no forum, mas não achei nada muito prático
sobre o uso de Spinner com informações do banco de dados onde apresento uma
informação ao usuário e salvo outra em um banco. Quando é Spinner com dados
fixo como estado civil, sexo, etc é fácil, mas buscando do banco é monto ele
apresento certo, mas para salvar na outra tabela que seria a minha dúvida.
Veja só o que preciso ao cadastrar o Cliente eu tenho o ramo de Atividade que
vem de outra tabela, onde tenho o ID e a descrição, eu preciso mostrar a
descrição na tela pro usuário escolher uma, mas ao salvar o cliente preciso
salvar o ID do Ramo de Atividade e não a descrição da forma que sei ele
salvaria a descrição, para bsucar o ID tendo a descrição pode acontecer de dar
erro, caso eu tenha no cadastro 2 descrições iguais, não seria o ideal, mas
poderia acontecer, mas o principal é que esta não seria uma lógica correta,
buscar o ID pela descrição e salvar depois, ideal é ao carregar o Spinner já
ter o Id guardado em algum local.
Veja como está o meu código de Edição de Clientes.
package br.com.afv.bean.editar;
// imports diversos
public class EditaClientes extends Activity {
static final int RESULT_SALVAR = 1;
static final int RESULT_EXCLUIR = 2;
protected SQLiteDatabase db;
private static final String NOME_BANCO = "bancoandroid";
private static final String NOME_TABELA_RAMOATIVIDADE =
"RAMOATIVIDADE";
private EditText campoRazaoSocial, ... ;
private Spinner campoSpinnerRamoAtividade, ... ;
private ImageButton btCancelar, btSalvar;
private String idRepres;
private int idCliente = 0;
private int posicaoSpinner;
NumberFormat numberFormat = new
DecimalFormat("###,##0.00");
String[] tipoPessoas = { "FISICA",
"JURIDICA" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cliente_editar);
Bundle extras = getIntent().getExtras();
idRepres = extras.get("representante").toString();
idCliente =
extras.getInt("id");
campoRazaoSocial = (EditText)
findViewById(R.id.cli_e_razaosocial);
campoRazaoSocial.setFilters(new
InputFilter[] {new InputFilter.AllCaps(), new InputFilter.LengthFilter(60) });
...
campoSpinnerTipoPessoa =
(Spinner) findViewById(R.id.cli_e_tipopessoa);
ArrayAdapter<String>
arrayAdapterTipoPessoa = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,
tipoPessoas);
campoSpinnerTipoPessoa.setAdapter(arrayAdapterTipoPessoa);
posicaoSpinner =
arrayAdapterTipoPessoa.getPosition("JURIDICA");
campoSpinnerTipoPessoa.setSelection(posicaoSpinner);
campoSpinnerRamoAtividade = (Spinner)
findViewById(R.id.cli_e_ramoatividade);
carregaSpinnerRamoAtividade();
if (idCliente != 0) {
// o cliente já está cadastrado pega os dados do cliente e coloca no formulário afim de alterar o que for necessário.
// desabilita os campos que não podem ser alterados
campoEmail.requestFocus();
} else {
// habilita os campos para a inclusão
campoRazaoSocial.requestFocus();
}
btCancelar = (ImageButton)
findViewById(R.id.btCancelar);
btCancelar.setOnClickListener(new
OnClickListener() {
public void
onClick(View view) {
setResult(RESULT_CANCELED);
// Fecha a tela
finish();
}
});
btSalvar = (ImageButton)
findViewById(R.id.btSalvar);
btSalvar.setOnClickListener(new
OnClickListener() {
public void
onClick(View view) {
salvar();
}
});
}
@Override
protected void onPause() {
super.onPause();
setResult(RESULT_CANCELED);
finish();
}
public void salvar() {
Boolean valida = true;
// valida os campos Obrigatórios
if
(campoRazaoSocial.getText().toString().trim().equals("")) {
Toast.makeText(this,
"A Razão Social deve ser informada!", Toast.LENGTH_SHORT).show();
valida = false;
}
...
switch
(campoSpinnerTipoPessoa.getSelectedItemPosition()) {
case 0: tipoPessoa = "F";
case 1: tipoPessoa = "J";
}
if (valida) {
Cliente cliente = new
Cliente();
// pega os dados do formulário e coloca no objeto pessoa
cliente.razaoSocial =
campoRazaoSocial.getText().toString().trim();
cliente.tipoPessoa =
tipoPessoa;
...
// aqui está errado, mas como fazer? Desta forma está salvando a descrição do ramos de atividade e não o ID da tabela.
cliente.ramoAtividade = campoSpinnerRamoAtividade.getSelectedItem().toString();
salvarCliente(cliente);
setResult(RESULT_OK, new Intent());
}
}
// Salvar o cliente
protected void salvarCliente(Cliente cliente)
{
ListaClientes.repositorio.salvar(cliente);
}
// carrega o Spinner de Ramo de Atividades
public void carregaSpinnerRamoAtividade() {
List<String> ramoAtividades = new
ArrayList<String>();
try {
db =
openOrCreateDatabase(NOME_BANCO, MODE_WORLD_READABLE, null);
final Cursor cursor =
db.rawQuery("select ID, NOME from " + NOME_TABELA_RAMOATIVIDADE +
" where ID_REPRES = '" + idRepres + "' order by NOME",
null);
if
(cursor.moveToFirst()) {
while (!cursor.isAfterLast()) {
ramoAtividades.add(cursor.getString(cursor.getColumnIndexOrThrow("NOME")));
cursor.moveToNext();
}
}
cursor.close();
ArrayAdapter<String> arrayAdapterRamoAtividades = new
ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,
ramoAtividades);
campoSpinnerRamoAtividade.setAdapter(arrayAdapterRamoAtividades);
} catch (Exception erro) {
Toast.makeText(this,
"Erro ao carregar os Ramos de Atividades. " + erro, Toast.LENGTH_SHORT).show();
}
}
}
Alguem poderia me dar uma dica de como proceder no meu código para alcançar o objetivo esperado ou algum exemplo funcionando para que eu possa ver?
Evandro Boa tarde !
Estou querendo fazer algo parecido, mas não sei por onde iniciar !
Pode da uma ajuda ?
já que o amigo passou por isso !
--
--
--
--
--
--