Olá, sou novata em android e tenho uma aplicação android com apenas uma activity que contem vários spinners que irão preencher uma tabela,
Em um momento preciso que a pessoa escolha em um radio button sim ou não para liberar os spinners restantes, o meu problema é que se coloco isso fora do botão gravar não consigo travar os spinners e se coloco dentro do botão gravar, ele só trava após submeter os dados, e depois não destrava.
Tem como atualizar a activity ao selecionar um radio button?
Não entendi a parte “é que se coloco isso fora do botão gravar não consigo travar os spinners e se coloco dentro do botão gravar”.
Tem como explicar melhor e postar o código?
Aqui está o código, perdoe se estiver fora dos padrões…
Método em que carrego meus spinners:
[code]public void atualizaSpinner() {
//SPINNER PARA QUE O MOTORISTA SE IDENTIFIQUE NO SISTEMA
spnMotorista = (Spinner) findViewById(R.id.spnMotorista);
List motoristas = new ArrayList();
motoristas = motoristaDAO.listaMotoristas();
ArrayAdapter adapterMotorista = new ArrayAdapter(GuiadeCanaActivity.this,
R.layout.spinner_layout,
R.id.spinner,
motoristas);
adapterMotorista.setDropDownViewResource(R.layout.spinner_layout);
spnMotorista.setAdapter(adapterMotorista);
//PEGAR O MOTORISTA SELECIONADO
spnMotorista.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> selectMotorista, View arg1, int arg2, long arg3) {
motorista = (Motorista) selectMotorista.getSelectedItem();
indexMotorista = spnMotorista.getSelectedItemPosition();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
//CASO NADA SEJA SELECIONADO
}
});
//SPINNER DE REBOCADOR(O QUE O MOTORISTA IRÁ DIRIGIR)
spnRebocador = (Spinner) findViewById(R.id.spnRebocador);
List<Rebocador> rebocadores = new ArrayList<Rebocador>();
rebocadores = rebocadorDAO.listaRebocadores();
ArrayAdapter<Rebocador> adapterRebocador = new ArrayAdapter<Rebocador>(GuiadeCanaActivity.this,
R.layout.spinner_layout,
R.id.spinner,
rebocadores);
adapterRebocador.setDropDownViewResource(R.layout.spinner_layout);
spnRebocador.setAdapter(adapterRebocador);
//PEGAR O REBOCADOR SELECIONADO
spnRebocador.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> selectRebocador, View arg1, int arg2, long arg3) {
rebocador = (Rebocador) selectRebocador.getSelectedItem();
indexRebocador = spnRebocador.getSelectedItemPosition();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
//CASO NADA SEJA SELECIONADO
}
});[/code]
Segue com os outros spinners…
Método que deveria atualizar através do raddio button:
[code]public void atualizaRadio() {
rgCanaPicada = rgCana.getCheckedRadioButtonId();
if(rgCanaPicada == R.id.radioSim){
System.out.println("-----------------entro do if de libera------------");
//VÃO SER USADOS NOS SPINNERS DE TRANSBORDO
List transbordos = new ArrayList();
transbordos = transbordoDAO.listaTransbordos();
//SPINNER DE TRANSBORDO1
spnTransbordo1 = (Spinner) findViewById(R.id.spnTransbordo1);
ArrayAdapter<Transbordo> adapterTransbordo1 = new ArrayAdapter<Transbordo>(GuiadeCanaActivity.this,
R.layout.spinner_layout,
R.id.spinner,
transbordos);
adapterTransbordo1.setDropDownViewResource(R.layout.spinner_layout);
spnTransbordo1.setAdapter(adapterTransbordo1);
//SPINNER DE TRANSBORDO2
spnTransbordo2 = (Spinner) findViewById(R.id.spnTransbordo2);
ArrayAdapter<Transbordo> adapterTransbordo2 = new ArrayAdapter<Transbordo>(GuiadeCanaActivity.this,
R.layout.spinner_layout,
R.id.spinner,
transbordos);
adapterTransbordo2.setDropDownViewResource(R.layout.spinner_layout);
spnTransbordo2.setAdapter(adapterTransbordo2);
//PEGA TRANSBORDO1 SELECIONADO
canaPicada = 1;
spnTransbordo1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> selectTransbordo1, View arg1, int arg2, long arg3) {
transbordo1 = (Transbordo) selectTransbordo1.getSelectedItem();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
//CASO NADA SEJA SELECIONADO
}
});
//PEGA TRANSBORDO2 SELECIONADO
spnTransbordo2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> selectTransbordo2, View arg1, int arg2, long arg3) {
transbordo2 = (Transbordo) selectTransbordo2.getSelectedItem();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
//CASO NADA SEJA SELECIONADO
}
});
}else{
System.out.println("----------------entro no else de esconde----------");
canaPicada = 0;
spnTransbordo1.setFocusable(false);
spnTransbordo1.setEnabled(false);
spnTransbordo1.setClickable(false);
spnTransbordo2.setFocusable(false);
spnTransbordo2.setEnabled(false);
spnTransbordo2.setClickable(false);
}
}[/code]
E meu botão gravar:
[code]//BOTÃO PARA GRAVAR CONTEÚDO
Button btnGravar = (Button) findViewById (R.id.btnGravar);
btnGravar.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
atualizaSpinner();
if(motorista.getiRegistroFuncionario() == 0 ||
rebocador.getiCodigoVeiculo() == 0 ||
fazenda.getiCodigoFazenda() == 0 ||
carregador.getiRegistroFuncionario() == 0 ||
carregadeira.getiCodigoVeiculo() == 0 ||
tratorista.getiRegistroFuncionario() == 0 ||
trator.getiCodigoVeiculo() == 0){
AlertDialog.Builder dialog = new AlertDialog.Builder(GuiadeCanaActivity.this);
dialog.setTitle(“GUIA DE CANA”);
dialog.setMessage(“ESCOLHA VALORES VÁLIDOS.”);
dialog.setNeutralButton(“CONTINUAR”, null);
dialog.show();
if(canaPicada == 0){
guiadeCana.setiCodigoTransbordo1(0);
guiadeCana.setiCodigoTransbordo2(0);
}else if(canaPicada == 1 && transbordo1.getiCodigoVeiculo() == 0 && transbordo2.getiCodigoVeiculo() == 0){
AlertDialog.Builder dialog1 = new AlertDialog.Builder(GuiadeCanaActivity.this);
dialog1.setTitle("GUIA DE CANA");
dialog1.setMessage("ESCOLHA UM TRANSBORDO.");
dialog1.setNeutralButton("CONTINUAR", null);
dialog1.show();
}else{
guiadeCana.setiCodigoTransbordo1(transbordo1.getiCodigoVeiculo());
guiadeCana.setiCodigoTransbordo2(transbordo2.getiCodigoVeiculo());
}
}else{
g.setiRegistroMotorista(motorista.getiRegistroFuncionario());
g.setiCodigoRebocador(rebocador.getiCodigoVeiculo());
g.setiCodigoFazenda(fazenda.getiCodigoFazenda());
g.setiNumeroQuadra(quadra.getiNumeroQuadra());
g.setiRegistroCarregador(carregador.getiRegistroFuncionario());
g.setiCodigocarregadeira(carregadeira.getiCodigoVeiculo());
g.setiRegistroTratorista(tratorista.getiRegistroFuncionario());
g.setiCodigoTrator(trator.getiCodigoVeiculo());
g.setiCanaPicada(canaPicada);
Timestamp data_trabalho = new Timestamp(new Date(System.currentTimeMillis()).getTime());
g.settDataTrabalho(data_trabalho);
g.inserir(guiadeCana);
AlertDialog.Builder dialog = new AlertDialog.Builder(GuiadeCanaActivity.this);
dialog.setTitle("Aviso");
dialog.setMessage("INSERIDO COM SUCESSO.");
dialog.setNeutralButton("CONTINUAR", null);
dialog.show();
//MÉTODO PARA ATUALIZAR SPINNER
atualizaSpinner();
}
}
});[/code]
Hum, se eu entendi bem, você quer detectar o momento em que o o radiogroup muda, para desabilitar/habilitar os spinners. Certo?
Para isto você pode registrar um listener no RadioGroup:
rgCana.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (R.id.radioSim == checkedId) {
//habilita os spinners
} else if (R.id.radioNao == checkedId) {
//desabilita os spinners
}
}
}
A documentação do setOnCheckedChangeListener:
Testei o que você falou, mas não está desabilitando os spinners, coloquei uns comentários e percebi que é porque o id do meu radio button não está sendo atualizado, quando eu mudo de sim para não, Declarei isso dentro do método atualizaSpinner:
rgCanaPicada = rgCana.getCheckedRadioButtonId();
atualizaRadio();
e mudei o método atualizaRadio conforme sua resposta:
[code]public void atualizaRadio() {
rgCana.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(rgCanaPicada == R.id.radioNao){
System.out.println("----------------entro no else de esconde----------");
canaPicada = 0;
spnTransbordo1.setFocusable(false);
spnTransbordo1.setEnabled(false);
spnTransbordo1.setClickable(false);
spnTransbordo2.setFocusable(false);
spnTransbordo2.setEnabled(false);
spnTransbordo2.setClickable(false);
}else{
//VÃO SER USADOS NOS SPINNERS DE TRANSBORDO
List transbordos = new ArrayList();
transbordos = transbordoDAO.listaTransbordos();
System.out.println("-----------------entro do if de libera------------");
//SPINNER DE TRANSBORDO1
spnTransbordo1 = (Spinner) findViewById(R.id.spnTransbordo1);
ArrayAdapter adapterTransbordo1 = new ArrayAdapter(GuiadeCanaActivity.this,
R.layout.spinner_layout,
R.id.spinner,
transbordos);
adapterTransbordo1.setDropDownViewResource(R.layout.spinner_layout);
spnTransbordo1.setAdapter(adapterTransbordo1);
//SPINNER DE TRANSBORDO2
spnTransbordo2 = (Spinner) findViewById(R.id.spnTransbordo2);
ArrayAdapter<Transbordo> adapterTransbordo2 = new ArrayAdapter<Transbordo>(GuiadeCanaActivity.this,
R.layout.spinner_layout,
R.id.spinner,
transbordos);
adapterTransbordo2.setDropDownViewResource(R.layout.spinner_layout);
spnTransbordo2.setAdapter(adapterTransbordo2);
//PEGA TRANSBORDO1 SELECIONADO
canaPicada = 1;
spnTransbordo1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> selectTransbordo1, View arg1, int arg2, long arg3) {
transbordo1 = (Transbordo) selectTransbordo1.getSelectedItem();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
//CASO NADA SEJA SELECIONADO
}
});
//PEGA TRANSBORDO2 SELECIONADO
spnTransbordo2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> selectTransbordo2, View arg1, int arg2, long arg3) {
transbordo2 = (Transbordo) selectTransbordo2.getSelectedItem();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
//CASO NADA SEJA SELECIONADO
}
});
}
}
});
}
[/code]
Aonde eu tenho que receber o rgCana.getCheckedRadioButtonId(); para que ele seja atualizado?
Em que ponto do código você chama o método atualizaRadio?
Você pode chamá-lo logo após carregar o rgCana.
Oi, deu certo, eu tive que carregar a rgCanaPicada dentro do onCheckedChanged e deixar explicito que a visibilidade do spinner de transbordo no if de sim é true e no if de não é false, para que ele fica atualizado durante as trocas.
Muito Obrigada!