Neste post veremos como é possível passar um valor de uma página (layout) para outra página em uma aplicação Android.
Existe uma pequena diferença entre passar um objeto do tipo primitivo e um objeto composto.
Abordaremos ambas as soluções a seguir.
A funcionalidade é bem parecida com uma implementação de Map, do Java, onde você cria um objeto e nele você seta um objeto e sua respectiva chave e o recupera posteriormente.
Para passar um simples objeto.
Para "chamar" uma nova página, criamos um objeto do tipo Intent, como já vimos no blog.
Para passarmos algum valor/objeto entre telas, precisamos adicionar "extras" no nosso objeto, da forma descrita abaixo:
// Cria a chamada para a página Page2
Intent myIntent = new Intent(v.getContext(), Page2.class);
// seta um valor extra, utilizando uma chave e um valor.
myIntent.putExtra("chaveTeste", "Novo Objeto");
// Inicia a nova página.
startActivity(myIntent);
Chamamos o método putExtra(chave,valor) passando uma "chave" que é um identificador para você poder recuperar o valor passado em outra tela e também pare diferenciar caso você passe outros valores no mesmo Intent. E também passasse como segundo paramêtro um valor, que pode ser um objeto do tipo primitivo ou composto.
Para ver a lista de objetos aceitos pelo método, favor checar na API do Android : http://developer.android.com/reference/android/content/Intent.htm
Agora, na outra tela, precisamos resgatar este valor, portanto fazemos da seguinte maneira:
Bundle extras = getIntent().getExtras();
String novoTexto = (String) extras.get("chaveTeste");Simples não? Só precisamos chamar o método getIntent() e o getExtras() dele que teremos um objeto do tipo Bundle, que contém os valores passados neste Intent. Depois disso, basta usarmos o método .get() passando a chave utilizada que recuperamos o objeto. Você precisará fazer um Cast para o seu tipo, pois o método extras.get() retorna um Object.
Para passar um objeto criado por você.
Para essa situação, seu objeto deve implementar a interface Parcelable, como fiz no exemplo abaixo:
package com.navegandoentrelayouts;
import android.os.Parcel;
import android.os.Parcelable;
public class Usuario implements Parcelable {
// Propriedades
private long registro;
private String nome;
// Construtores
public Usuario() {
}
public Usuario(long registro, String nome) {
super();
this.registro = registro;
this.nome = nome;
}
public Usuario(Parcel in) {
readFromParcel(in);
}
// Getters e setters
public long getRegistro() {
return registro;
}
public String getNome() {
return nome;
}
public void setRegistro(long registro) {
this.registro = registro;
}
public void setNome(String nome) {
this.nome = nome;
}
// Método auxilirares
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeLong(registro);
out.writeString(nome);
}
private void readFromParcel(Parcel in) {
registro = in.readLong();
nome = in.readString();
}
@SuppressWarnings("unchecked")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Usuario createFromParcel(Parcel in) {
return new Usuario(in);
}
public Usuario[] newArray(int size) {
return new Usuario[size];
}
};
}
O próximo passo é setar o objeto no Intent:
// Cria a chamada para a página Page2
Intent myIntent = new Intent(v.getContext(), Page2.class);
// Crio o meu objeto.
Usuario usuario = new Usuario(15L, "Rafael");
// seta um valor extra, utilizando uma chave e um valor.
myIntent.putExtra("usuario", usuario);
// Inicia a nova página.
startActivity(myIntent);Para recuperar o objeto enviado utilizaremos uma outra forma. E é por esta razão que implementamos a interface Parcelable.
Desta vez, você não irá chamar o método .get() para recuperar o Bundle, e sim o método getParcelable(), onde você passa a mesma chave que passou para setar o objeto no Intent.
Veja o exemplo:
// Passa a chave, faz um Cast e tenha o objeto
Usuario usuario = (Usuario) extras.getParcelable("usuario");Pronto. Agora você já tem o objeto recuperado na outra tela e pode trafegar informações entre elas.
Olá, poderia me explicar como funciona da linha 61 em diante???
ResponderExcluirOlá, Odete.
ResponderExcluirtemos que implementar essa interface para conseguirmos recuperar o objeto na outra página.
Para mais informações, você pode dar uma olhada na API.
http://developer.android.com/reference/android/os/Parcelable.Creator.html
Abraços
ajudou muito agora, msm sendo um post antigo.
ResponderExcluirComo faço pra passar uma lista dessa classe para outra tela?
ResponderExcluirInsira o GSON em seu buid.gradle
Excluircompile 'com.google.code.gson:gson:2.2.4'
E passa a lista desta maneira:
final String toJson = new Gson().toJson(SUA_LISTA_AQUI);
final Intent intent = new Intent(getActivity(), ProximaActivity.class);
intent.putExtra("key", toJson);
startActivity(intent);
E na ProximaActivity, para recuperar o valor, faça desta maneira:
String value = getIntent().getExtras().getString("key");
Type listType = new TypeToken>() {
}.getType();
List list = new Gson().fromJson(value, listType);
Duvidas é só falar.
Abraços
Boa pergunta!
ResponderExcluirVou postar a resposta na pergunta acima!
Excluir