[ANDROID]Porque não existe um putExtra(String,Object)?

Olha, estou pasmo pelo que percebi recentemente ao precisar desse recurso…

No Android, para iniciar e/ou enviar dados de uma activitty para outra, se usa a classe Intent, e com esta classe usa-se o método “putExtra” para inserir dados, que podem ser recuperados em outra Activity, por exemplo:

//Activity superior:
Intent proximo = new Intent(this,ProximoActivity.class);
proximo.putExtra("mensagem","Ola tudo bem?");

//Activity inferior(proxima):
Bundle dados = getIntent.getExtras();
String mensagem = dados.get("mensagem");

Olha só que coisa estranha, ao setar dados no Bundle dentro do Intent, você só consegue inserir dados fixos como String, Integer, Boolean,Long…

Agora para recuperar do Bundle você consegue pegar a super classe Object através do método “get()”…

isso me incomodou muito quando descobri, porque para que eu possa enviar algum objeto personalizado de meu projeto eu não consigo enviar como “Object”, eu tenho então que fazer uma gambiarra e implementar uma das classes do Android em minhas classes do projeto, como a seguir:

//Implementação de Serializable:
public class Exemplo implements Serializable{}

///Ou implementação de Parceable:
public class Exemplo implements Parceable{ }

e só assim consigo enviar uma classe personalizada pelo Bundle do Intent:

Intent proximo = new Intent(this,ProximoActivity.class);
proximo.putExtra("objetoExemplo",new Exemplo());

Agora eu pergunto, porque a equipe que desenvolver o framework simplesmente não adicionou um método putExtra(String key,Object object) na classe Bundle ?

Também já me perguntei isso, se tivessemos um put(Object), poderiamos passar um Listener entre as activities e ela pode dar problemas por causa do life cycle da Activity.

O Parcelable simplesmente serializa o objeto, voce não terá a mesma instancia do outro lado.

[quote=Marky.Vasconcelos]Também já me perguntei isso, se tivessemos um put(Object), poderiamos passar um Listener entre as activities e ela pode dar problemas por causa do life cycle da Activity.

O Parcelable simplesmente serializa o objeto, voce não terá a mesma instancia do outro lado.[/quote]

Hmm…realmente não tinha imaginado essa situação que poderia ser criada com um Listener.

Ai complica mesmo, não seria viável um método para passar Object e imagino que por isso que criaram o Parceable e o Serializable.

Obrigado pelo esclarecimento marky.

Intent finalizaCompra = new Intent(MinhaCesta.this,FinalizaCompra.class);
Bundle bundle = new Bundle();

bundle.putSerializable(“cesta”, cesta);

finalizaCompra.putExtras(bundle);

startActivity(finalizaCompra);

Lembrando que o objeto da classe que for passada como parâmetro tem que implementar Serializable