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

M

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);
M

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 ?

M

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.

F

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