Android, utilizar dados entre varias telas Bundle/Intent

9 respostas
M

Bom dia,

Amigos, estou com o seguinte problema:
Eu preciso enviar informações de um edittext, para um textview, em outra tela, consigo enviar somente, se setar a tela no intent. No caso, eu precisaria navegar entre as telas, antes de chegar ao resultado.
No app, eu necessito enviar informações de varias activity (Tela_nv1, Tela_nv2,Tela_nv3) para uma activity final (Resposta).
Esse cod abaixo, eu consigo enviar as somente para a proxima activity, eu necessito de passar por todas as telas, enviando informações para ver todas na activity resposta.

Tela_nv1.java

btn_main = (Button)findViewById(R.id.btn_main);
                btn_nv2  = (Button)findViewById(R.id.btn_nv2);
		et1_nv1 = (EditText) findViewById(R.id.et1_nv1);
                et2_nv1 = (EditText) findViewById(R.id.et2_nv1);
                et3_nv1 = (EditText) findViewById(R.id.et3_nv1);
                et4_nv1 = (EditText) findViewById(R.id.et4_nv1);
                btn_nv2.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				String textonv1 = et1_nv1.getText().toString();
				String textonv2 = et2_nv1.getText().toString();
				String textonv3 = et3_nv1.getText().toString();
				String textonv4 = et4_nv1.getText().toString();
				final ArrayList array = new ArrayList();
				array.add(textonv1);
				array.add(textonv2);
				array.add(textonv3);
				array.add(textonv4);
				Intent intent = new Intent(Tela_nv1.this,Resposta.class);
				Collections.shuffle(array);
				String texto = array.toString();
				Bundle bundle = new Bundle();
				bundle.putString("guardainfo1", texto);
				intent.putExtras(bundle);
				startActivity(intent);
			}
		});
Resposta.java
TextView tv_resposta;
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.resposta);
		tv_resposta = (TextView) findViewById(R.id.tv_resposta);
		//Intent getintent = getIntent();
		//String chegouaqui = (String)getintent.getSerializableExtra("guardainfo1"); 
		Intent intent = getIntent();
		Bundle bundle = intent.getExtras();
		String chegouaqui = bundle.getString("guardainfo1");
		tv_resposta.setText(chegouaqui);
	}

9 Respostas

Marky.Vasconcelos

Voce vai ter que reenviar os Bundles entre as Activities.

M

Terei que passar as informações e 1 por 1 ?

V

Sim

V

Ou então você cria uma Classe com um atributo publico e estático.

public class SuaClasse {

public static int id;

}

Para chamar:

SuaClasse.id = 0;
  Log.i("", "" + SuaClasse.id);
Marky.Vasconcelos

NÃO CAIA na tentação de criar atributos estaticos.

Voce vai precisar colocar no Intent da praxima Activity o valor que voce quer levar.

E para retornar o valor para a Activity anterior voce vai precisar usar o startactivityForResult e setResult.

A

Olá
Uma alternativa é usar uma classe que adote o padrão Singleton, defina todas as variáveis que precisa passar de uma activity para outra e no final terá todas as informações para a activity Resposta.
Coloque checagens para garantir que os dados foram informados em cada activity. O local ideal para salvar os dados é antes do startActivity para a próxima etapa.
Veja no meu blog os posts Singleton e Singleton2, link abaixo.

Abraço

V

Eu nunca utilizo atributos estáticos, mas qual seria o problema de usar ?

Marky.Vasconcelos

Armadilhas, um dia voce vai querer usar sua Activity por outro fluxo, mas voce esquece de popular aquele bendito campo estatico, então era melhor ter passado por referencia.

felipebonezi

Porque você não utiliza o método putExtra da classe Intent e passa o próprio Bundle nela? :slight_smile:

Na hora do retorno, tem que utilizar o startActivityForResult e setResult, como o Marky falou!

Criado 7 de março de 2013
Ultima resposta 12 de mar. de 2013
Respostas 9
Participantes 5