sexta-feira, 30 de outubro de 2015

Android: Passando dados entre as telas

  Hoje falarei de uma das formas de se enviar conteúdos de uma tela a outra.
  O exemplo que fiz foi bem simples, coloquei uma caixa de texto em uma tela e um botão. Na outra apenas um TextView. O texto digitado na primeira tela será recebido pela segunda tela e exibido no TextView.
   As telas ficaram assim:
   


   O código ficou bem simples. Vou me ater as classes java, já que criar as duas telas é muito simples utilizando o xml:
   Classe Main:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText edtNome;
private Button btnEnviar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Tratando os campos da tela
edtNome = (EditText) findViewById(R.id.edtNome);
btnEnviar = (Button) findViewById(R.id.btnEnviar);
btnEnviar.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,NovaTela.class);
intent.putExtra("Nome",edtNome.getEditableText().toString());
startActivity(intent);
}
}

   Primeira coisa a observar: A classe implementa a interface    View.OnClickListener. Esta é uma forma de se capturar o click do botão.
   No método OnClick fica o código que será executado quando o botão for clicado.
   Utilizamos a classe Intent e seu método putExtra. É através dele que transferimos conteúdo entre telas. Percebam que criamos uma chave chamada "Nome" e pegamos o conteúdo do edtNome, variável que represente o campo da tela.
   Na próxima classe, NovaTela.class teremos que preparar o tereeno para que ela receba o conteúdo passado.

   Classe Nova Tela:
  
public class NovaTela extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nova_tela);
TextView texto = (TextView) findViewById(R.id.txtSaudacao);
Bundle extras = getIntent().getExtras();
if (extras!= null) {
texto.setText("Texto Digitado:" + extras.getString("Nome"));
}
}
}
   O importante aqui é observar este trecho de código:
   Bundle extras = getIntent().getExtras();
   O método getIntent recupera a intent que chamou a tela atual.
   O método getExtras retorna um map com todos os extras da intent.
   A classe Bundle implementa um map de Strings.
   Depois verificamos se existe algum estra e se existir pegamos o com a chave nome e mostramos Textview da tela:
if (extras!= null) {
texto.setText("Texto Digitado:" + extras.getString("Nome"));
}

  Última dica, se fosse preciso propagar o conteúdo para uma terceira tela teríamos que fazer a mesma coisa, ou seja a passagem só funciona tela a tela.