Variável e Activity

15 respostas
B

Boa tarde/noite/dia galera, é o seguinte, eu to fazendo um app mas to “emperrado”.
a dúvida é:

Eu preciso setar um valor 1 ou 0 (na “primeira” activity) com o Radio Botton (que tem opções de “Sim” ou “Não”) ou seja quando eu clico “SIM” no Rádio Botton quero setar a variável 1 que tem o valor numérico 1, se eu escolho “Não” setar a variável 0 que corresponde ao valor numérico 0.
Depois disso eu preciso “levar” o valor escolhido para a próxima Activity que terá as mesmas opções só que com valores diferente. “SIM” agora vale 2, e “NãO” SEMPRE SERá 0. e somar esses valores numa terceira Activity e mostrar na tela o resultado.

Ps: Desculpa se postei em lugar errado, ou algo do tipo errado.

15 Respostas

V

Por favor, evite marcar tópicos com informações óbvias como [Dúvida] ou [Ajuda].

F
Use um Bundle.
public static final KEY_BUNDLE = "KEY_BUNDLE";
public static final KEY_ACTIVITY_1 = "KEY_ACTIVITY_1";
public static final KEY_ACTIVITY_2 = "KEY_ACTIVITY_2";
public static final KEY_ACTIVITY_3 = "KEY_ACTIVITY_3";

//Activity1
Bundle bundle = new Bundle();
bundle.putInt(KEY_ACTIVITY_1, mRationChoose);

Intent intent = new Intent(getApplicationContext(), Activity2.class);
intent.putExtra(KEY_BUNDLE, bundle);
startActivity(intent); //chamar activity 2

//Activity2
Intent myIntent= getIntent(); 
Bundle bundle = intent.getBundleExtra(KEY_BUNDLE); 
int mRationChoose = bundle.getIntExtra(KEY_ACTIVITY_2 , 0);
bundle.putInt(KEY_ACTIVITY_3, mRatioChooser2);

Intent intent = new Intent(getApplicationContext(), Activity3.class);
intent.putExtra(KEY_BUNDLE, bundle);
startActivity(intent); //chamar activity 3
B
fabriciov:
Use um Bundle.
public static final KEY_BUNDLE = "KEY_BUNDLE";
public static final KEY_ACTIVITY_1 = "KEY_ACTIVITY_1";
public static final KEY_ACTIVITY_2 = "KEY_ACTIVITY_2";
public static final KEY_ACTIVITY_3 = "KEY_ACTIVITY_3";

//Activity1
Bundle bundle = new Bundle();
bundle.putInt(KEY_ACTIVITY_1, mRationChoose);

Intent intent = new Intent(getApplicationContext(), Activity2.class);
intent.putExtra(KEY_BUNDLE, bundle);
startActivity(intent); //chamar activity 2

//Activity2
Intent myIntent= getIntent(); 
Bundle bundle = intent.getBundleExtra(KEY_BUNDLE); 
int mRationChoose = bundle.getIntExtra(KEY_ACTIVITY_2 , 0);
bundle.putInt(KEY_ACTIVITY_3, mRatioChooser2);

Intent intent = new Intent(getApplicationContext(), Activity3.class);
intent.putExtra(KEY_BUNDLE, bundle);
startActivity(intent); //chamar activity 3

Fabrício, ai eu coloco um OnClick em cada botão Rádio para setar o valor nas "KEY_ACTIVITY" Né? Muitíssimo obrigado cara!

F

O KEY_ACTIVITY_1,2,3 são chaves (ou “endereço”) para recuperar o valor do bundle

o valor você coloca na variavel mRatioChooser como escrito aqui:

ai na outra activity você usa a mesma chave para recuperar esse valor

B

[quote=fabriciov]O KEY_ACTIVITY_1,2,3 são chaves (ou “endereço”) para recuperar o valor do bundle

o valor você coloca na variavel mRatioChooser como escrito aqui:

ai na outra activity você usa a mesma chave para recuperar esse valor

@Edit

Ta dando erro com a intent.putExtra(KEY_BUNDLE, bundle);

startActivity(intent);

E para somar e mostrar na 3° Activity? Mostrar em tamanho Grande na tela.

Ps: Na verdade são 6 Activitys pra mostrar a Soma de todas na 7°. mas com esse exemplo eu reproduzo nas outras ^^ obrigado.

F

Qual erro ?

public class Utils{
public static final KEY_BUNDLE = "KEY_BUNDLE";
public static final KEY_ACTIVITY_1 = "KEY_ACTIVITY_1";
public static final KEY_ACTIVITY_2 = "KEY_ACTIVITY_2";
public static final KEY_ACTIVITY_3 = "KEY_ACTIVITY_3";
}

//Activity1
protected void onCreate(){
Bundle bundle = new Bundle();
bundle.putInt(Utils.KEY_ACTIVITY_1, mRationChoose); //adiciona valor ao bundle
Intent intent = new Intent(getApplicationContext(), Activity2.class);
intent.putExtra(Utils.KEY_BUNDLE, bundle);
startActivity(intent); //chamar activity 2
}


//Activity2
protected void onCreate(){
Intent myIntent= getIntent(); 
Bundle bundle = myIntent.getBundleExtra(Utils.KEY_BUNDLE); 
int mRationChoose = bundle .getIntExtra(Utils.KEY_ACTIVITY_2 , 0);
bundle.putInt(KEY_ACTIVITY_3, mRatioChooser2); //adiciona outro valor para o bundle recebido na activity anterior
Intent intent = new Intent(getApplicationContext(), Activity3.class);
intent.putExtra(Utils.KEY_BUNDLE, bundle); //encaminha o bundle para a proxima activity
startActivity(intent); //chamar activity 3
}
B
fabriciov:
Qual erro ?
public class Utils{
public static final KEY_BUNDLE = "KEY_BUNDLE";
public static final KEY_ACTIVITY_1 = "KEY_ACTIVITY_1";
public static final KEY_ACTIVITY_2 = "KEY_ACTIVITY_2";
public static final KEY_ACTIVITY_3 = "KEY_ACTIVITY_3";
}

//Activity1
protected void onCreate(){
Bundle bundle = new Bundle();
bundle.putInt(Utils.KEY_ACTIVITY_1, mRationChoose); //adiciona valor ao bundle
Intent intent = new Intent(getApplicationContext(), Activity2.class);
intent.putExtra(Utils.KEY_BUNDLE, bundle);
startActivity(intent); //chamar activity 2
}


//Activity2
protected void onCreate(){
Intent myIntent= getIntent(); 
Bundle bundle = myIntent.getBundleExtra(Utils.KEY_BUNDLE); 
int mRationChoose = bundle .getIntExtra(Utils.KEY_ACTIVITY_2 , 0);
bundle.putInt(KEY_ACTIVITY_3, mRatioChooser2); //adiciona outro valor para o bundle recebido na activity anterior
Intent intent = new Intent(getApplicationContext(), Activity3.class);
intent.putExtra(Utils.KEY_BUNDLE, bundle); //encaminha o bundle para a proxima activity
startActivity(intent); //chamar activity 3
}

Nessa Parte.
Essas são as linhas de erro.
" public class Utils{
public static final KEY_BUNDLE = "KEY_BUNDLE";
public static final KEY_ACTIVITY_1 = "KEY_ACTIVITY_1";
public static final KEY_ACTIVITY_2 = "KEY_ACTIVITY_2";
public static final KEY_ACTIVITY_3 = "KEY_ACTIVITY_3"; "

Precisa importar alguma coisa ou declarar algo *KEY_ACTIVITY* por exemplo? (eu sei que preciso declarar a variável "mRatioChooser") ? esse FINAL é o que da erro, eu não sei bem pra que serve o "Final". se quiser te mando minha Activity 1
Segue minha Activity 1. se puder dar uma olhada e "adaptar" o código, pois só da erro aqui. obrigado.

package bi01soft.mygbiz.binumeral.com;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;

public class Tabela1 extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.tabela1);
		
	}
	
    public void goButtonClicked(View v) {
    	finish();
}
    public void AbrirAtividade1(View v) {
    	Intent myIntent = new Intent(v.getContext(), Tabela2.class);  
        startActivity(myIntent);  
        
        finish();
}

}

AbrirAtividade1 é do botão pra mudar pra minha activity 2 que se chama Tabela2.

F
Esqueci de declara o tipo
public class Utils{
public static final String KEY_BUNDLE = "KEY_BUNDLE";
public static final String KEY_ACTIVITY_1 = "KEY_ACTIVITY_1";
public static final String KEY_ACTIVITY_2 = "KEY_ACTIVITY_2";
public static final String KEY_ACTIVITY_3 = "KEY_ACTIVITY_3";
}

mRatioChooser é o valor que você quer passar, no caso um int.

package bi01soft.mygbiz.binumeral.com;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;

public class Tabela1 extends Activity {
	



public class Utils{
public static final String KEY_BUNDLE = "KEY_BUNDLE";
public static final String KEY_ACTIVITY_1 = "KEY_ACTIVITY_1";
public static final String KEY_ACTIVITY_2 = "KEY_ACTIVITY_2";
public static final String KEY_ACTIVITY_3 = "KEY_ACTIVITY_3";
}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.tabela1);
		
	}
	
    public void goButtonClicked(View v) {
    	finish();
}
    public void AbrirAtividade1(View v) {
        Bundle bundle = new Bundle();
        bundle.putInt(Utils.KEY_ACTIVITY_1, valorIntQueQuerEnviarParaTabela2);
    	Intent myIntent = new Intent(v.getContext(), Tabela2.class);  
        myIntent .putExtra(Utils.KEY_BUNDLE, bundle);
        startActivity(myIntent);  
        finish();
}

}

aconselho estudar java básico primeiramente do que tentar aprender direto com Android.

B
fabriciov:
Esqueci de declara o tipo
public class Utils{
public static final String KEY_BUNDLE = "KEY_BUNDLE";
public static final String KEY_ACTIVITY_1 = "KEY_ACTIVITY_1";
public static final String KEY_ACTIVITY_2 = "KEY_ACTIVITY_2";
public static final String KEY_ACTIVITY_3 = "KEY_ACTIVITY_3";
}

mRatioChooser é o valor que você quer passar, no caso um int.

package bi01soft.mygbiz.binumeral.com;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;

public class Tabela1 extends Activity {
	



public class Utils{
public static final String KEY_BUNDLE = "KEY_BUNDLE";
public static final String KEY_ACTIVITY_1 = "KEY_ACTIVITY_1";
public static final String KEY_ACTIVITY_2 = "KEY_ACTIVITY_2";
public static final String KEY_ACTIVITY_3 = "KEY_ACTIVITY_3";
}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.tabela1);
		
	}
	
    public void goButtonClicked(View v) {
    	finish();
}
    public void AbrirAtividade1(View v) {
        Bundle bundle = new Bundle();
        bundle.putInt(Utils.KEY_ACTIVITY_1, valorIntQueQuerEnviarParaTabela2);
    	Intent myIntent = new Intent(v.getContext(), Tabela2.class);  
        myIntent .putExtra(Utils.KEY_BUNDLE, bundle);
        startActivity(myIntent);  
        finish();
}

}

aconselho estudar java básico primeiramente do que tentar aprender direto com Android.

Assim, eu to aprendendo sabe, faço Ciências da Computação (Tô no primeiro período, vendo Phyton em Programação 1, vou ver Java em Programação 2 no segundo período, eu entendo um pouco de Java, mas to querendo melhorar e aprender mesmo sem a universidade aprendendo java para android). Obrigado.

Ps: Vou testar o novo código.

B

package bi01soft.mygbiz.binumeral.com;

import android.os.Bundle;

import android.app.Activity;

import android.content.Intent;

import android.view.View;

public class Tabela2 extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.tabela2);
	
}

public void goButtonClicked(View v) {
	finish();
}

public void AbrirAtividade1(View v) {

Intent myIntent = new Intent(v.getContext(), Tabela3.class);

startActivity(myIntent);
finish();
}

}

Essa ai é minha Segunda Activity, poderia me mostrar como ficará? ainda to com dúvidas pra ver se ainda vai ficar as “keys” e como vai “aparar”, ja setei o botão que atribuirá a int pra enviar. Por conta da “Utils”, tem que colocar todas as strings em todas as activitys?

F
package bi01soft.mygbiz.binumeral.com; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.View; 

public class Tabela2 extends Activity { 
private Bundle mBundle = null;
private int mIntDaTabela2 = 0; //caso precise dele nessa activity


@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.tabela2); 

Intent myIntent= getIntent(); 
mBundle  = myIntent.getBundleExtra(Utils.KEY_BUNDLE); 
mIntDaTabela2  = bundle.getIntExtra(Utils.KEY_ACTIVITY_1 , 0);
} 

public void goButtonClicked(View v) { 
finish(); 
} 

public void AbrirAtividade1(View v) { 
Intent myIntent = new Intent(v.getContext(), Tabela3.class); 
if(mBundle !=null){ 
mBundle.putInt(KEY_ACTIVITY_2, valorIntQueQuerEnviarParaTabela3);
myIntent.putExtra(Utils.KEY_BUNDLE, mBundle);
}else{
Bundle bundle = new Bundle();
bundle.putInt(KEY_ACTIVITY_2, valorIntQueQuerEnviarParaTabela3);
myIntent.putExtra(Utils.KEY_BUNDLE, bundle);
}

startActivity(myIntent); 

finish(); 
} 
}
B
package bi01soft.mygbiz.binumeral.com;  
  
import android.os.Bundle;  
import android.app.Activity;  
import android.content.Intent;  
import android.view.View;  
  
public class Tabela1 extends Activity {  
      
  
  
  
public class Utils{  
public static final String KEY_BUNDLE = "KEY_BUNDLE";  
public static final String KEY_ACTIVITY_1 = "KEY_ACTIVITY_1";  
public static final String KEY_ACTIVITY_2 = "KEY_ACTIVITY_2";  
public static final String KEY_ACTIVITY_3 = "KEY_ACTIVITY_3";  
}  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.tabela1);  
          
    }  
      
    public void goButtonClicked(View v) {  
        finish();  
}  
    public void AtribuirValor(View v) {  

    }

    private int EnviarValor = 1; 
    public void AbrirAtividade1(View v) {  
        Bundle bundle = new Bundle();  
        bundle.putInt(Utils.KEY_ACTIVITY_1, EnviarValor);  
        Intent myIntent = new Intent(v.getContext(), Tabela2.class);    
        myIntent .putExtra(Utils.KEY_BUNDLE, bundle);  
        startActivity(myIntent);    
        finish();  
}  
  
}
A primeira tabela ficou assim como tá ai mas ta com erro, por que se eu coloco a minha int dentro do OnClick da Erro não sei porque. Olha a segunda tabela ta com erro nos mBundle. e KEY_Activity. Dúvida não tem que Declarar também igual na primeira Activity não?
package bi01soft.mygbiz.binumeral.com;   
  
import android.os.Bundle;   
import android.app.Activity;   
import android.content.Intent;   
import android.view.View;   
  
public class Tabela2 extends Activity {   
private Bundle mBundle = null;  
private	int EnviarValor2 = 2;//caso precise dele nessa activity  
  
  
	@Override
	protected void onCreate(Bundle savedInstanceState) {   
		super.onCreate(savedInstanceState);   
		setContentView(R.layout.tabela2);   
  
		Intent myIntent= getIntent();   
		mBundle  = myIntent.getBundleExtra(Utils.KEY_BUNDLE);   
		EnviarValor2  = bundle.getIntExtra(Utils.KEY_ACTIVITY_1 , 0);  
	}   
  
	public void goButtonClicked(View v) {   
		finish();
	}   
	
	int ValorParcial = EnviarValor + EnviarValor2;
	
	public void AbrirAtividade1(View v) {   
		Intent myIntent = new Intent(v.getContext(), Tabela3.class);   
		if(mBundle !=null){   
			mBundle.putInt(KEY_ACTIVITY_2, ValorParcial);  
			myIntent.putExtra(Utils.KEY_BUNDLE, mBundle);  
		}else{  
			Bundle bundle = new Bundle();  
			bundle.putInt(KEY_ACTIVITY_2, ValorParcial);  
			myIntent.putExtra(Utils.KEY_BUNDLE, bundle);  
		}  
  
		startActivity(myIntent);   
  
		finish();   
	}   
}

Essa ai é a minha segunda tabela com as "configurações" que precisa ter (eu adicionei o valor somar na int pois a tabela 3 receberá o resultado da soma da int da tabela1 + tabela 2) e a tabela2 terá um valor dependendo se a pessoa Clicar no "Sim" ou "Não". Se clicar Sim vai atribuir uma int com Valor 2 que será somado com o valor 1 que é da Int da tabela 1. entendeu?

F

Não é preciso redeclarar, pois são variaveis estáticas… vão ficar em memoria durante a execução inteira da aplicação.
Crie uma classe chama Utils (em arquivo separado) que o erro da KEY vai sumir, acredito que seja por que ela é uma inner-Class e o compilador não consegue achar o caminho.
comando “final” significa que aquele valor da variavel ja é o final, ou seja, não será alterado (não deixará alterar).

Passa o mouse em cima do erro e leia, provavelmente é erro banal.

B
fabriciov:
Não é preciso redeclarar, pois são variaveis estáticas.. vão ficar em memoria durante a execução inteira da aplicação. Crie uma classe chama Utils (em arquivo separado) que o erro da KEY vai sumir, acredito que seja por que ela é uma inner-Class e o compilador não consegue achar o caminho. comando "final" significa que aquele valor da variavel ja é o final, ou seja, não será alterado (não deixará alterar).

Passa o mouse em cima do erro e leia, provavelmente é erro banal.

Estou com erros nos Bundles, eu criei a Classe Utils e ainda continuar com erros nas "keys" apenas nas tabelas 2, mas acho que é por conta dos bundles, vc consegue ver o erro? segue minha tabela 2.
package bi01soft.mygbiz.binumeral.com;   
  
import android.os.Bundle;   
import android.app.Activity;   
import android.content.Intent;   
import android.view.View;   
  
public class Tabela2 extends Activity {   
private Bundle mBundle = null;  
private	int EnviarValor2 = 2;//caso precise dele nessa activity  
  
  
	@Override
	protected void onCreate(Bundle savedInstanceState) {   
		super.onCreate(savedInstanceState);   
		setContentView(R.layout.tabela2);   
  
		Intent myIntent= getIntent();   
		mBundle  = myIntent.getBundleExtra(Utils.KEY_BUNDLE);   
		EnviarValor2  = bundle.getIntExtra(Utils.KEY_ACTIVITY_1 , 0);  
	}   
  
	public void goButtonClicked(View v) {   
		finish();
	}   
	
	int ValorParcial = "EnviarValor" + "EnviarValor2";
	
	public void AbrirAtividade1(View v) {   
		Intent myIntent = new Intent(v.getContext(), Tabela3.class);   
		if(mBundle !=null){   
			mBundle.putInt(KEY_ACTIVITY_2, ValorParcial);  
			myIntent.putExtra(Utils.KEY_BUNDLE, mBundle);  
		}else{  
			Bundle bundle = new Bundle();  
			bundle.putInt(KEY_ACTIVITY_2, ValorParcial);  
			myIntent.putExtra(Utils.KEY_BUNDLE, bundle);  
		}  
  
		startActivity(myIntent);   
  
		finish();   
	}   
}
F

Importe este pequeno projeto que fiz.
É um exemplo prático de como fazer… no onCreate ele tenta recupera o Bundle enviado pela activity anterior (null caso não existir) e ao clicar em um botão é pego o valor digitado em um EditText, somado com o valor recebido, guardado num bundle e enviado para a próxima activity (outra igual) que repete o fluxo.

https://mega.co.nz/#!OohXyayJ!YIkS808fcGYumyXZeVXMdXDaZK0NH1c7G-mtT2dXVe8

Nesse projeto é utilizado apenas uma Chave para armazenar um inteiro (soma das anteriores), no seu caso só vai ter que criar uma chave para cada.

Criado 8 de junho de 2013
Ultima resposta 13 de jun. de 2013
Respostas 15
Participantes 3