[RESOLVIDO]Atualizar Spinner através de um Radio Button

6 respostas
E

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?

6 Respostas

W

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?

E

Aqui está o código, perdoe se estiver fora dos padrões...
Método em que carrego meus spinners:

public void atualizaSpinner() {
        //SPINNER PARA QUE O MOTORISTA SE IDENTIFIQUE NO SISTEMA
        spnMotorista = (Spinner) findViewById(R.id.spnMotorista);
        List<Motorista> motoristas = new ArrayList<Motorista>();
        motoristas = motoristaDAO.listaMotoristas();
        ArrayAdapter<Motorista> adapterMotorista = new ArrayAdapter<Motorista>(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
			}
        });

Segue com os outros spinners...

Método que deveria atualizar através do raddio button:

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<Transbordo> transbordos = new ArrayList<Transbordo>();
        	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);
    	}
}

E meu botão gravar:

//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();
		}
	}
});
W

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:

http://developer.android.com/reference/android/widget/RadioGroup.html#setOnCheckedChangeListener(android.widget.RadioGroup.OnCheckedChangeListener)

E

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:

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<Transbordo> transbordos = new ArrayList<Transbordo>();
					transbordos = transbordoDAO.listaTransbordos();
					System.out.println("-----------------entro do if de libera------------");
					//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
						}
					});
				}
			}
		});
	}

Aonde eu tenho que receber o rgCana.getCheckedRadioButtonId(); para que ele seja atualizado?

W

Em que ponto do código você chama o método atualizaRadio?

Você pode chamá-lo logo após carregar o rgCana.

E

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!

Criado 15 de fevereiro de 2013
Ultima resposta 15 de fev. de 2013
Respostas 6
Participantes 2