Como passo um valor de uma tela para a tela anterior?
Considere este caso: tenho duas atividades. A primeira tela possui um TextView
e um botão e a segunda atividade possui um EditText
e um botão.
Se eu clicar no primeiro botão, ele deverá passar para a segunda atividade e aqui o usuário deverá digitar algo na caixa de texto. Se ele pressionar o botão na segunda tela, os valores da caixa de texto deverão passar para a primeira atividade e isso deverá ser exibido na primeira atividade TextView
.
android
android-activity
Kumar
fonte
fonte
Respostas:
Para capturar as ações realizadas em uma atividade dentro de outra, são necessárias três etapas.
Inicie a atividade secundária (sua atividade 'Editar texto') como uma subatividade usando
startActivityForResult
da sua atividade principal.Dentro da subatividade, em vez de apenas fechar a Activity quando um usuário clica no botão, você precisa criar um novo Intent e incluir o valor do texto inserido em seu pacote de extras. Para passá-lo de volta para a chamada pai
setResult
antes de chamarfinish
para fechar a atividade secundária.A etapa final está na atividade de chamada: Substituir
onActivityResult
para ouvir os retornos de chamada da atividade de entrada de texto. Obtenha o extra do Intent retornado para obter o valor de texto que você deve exibir.fonte
new Intent(null);
era "muito ambíguo" e eu tive que mudar paranew Intent();
.Existem algumas maneiras pelas quais você pode acessar variáveis ou objetos em outras classes ou Activity.
A. Banco de dados
B. preferências compartilhadas.
C. Serialização de objetos.
D. Uma classe que pode conter dados comuns pode ser nomeada como Utilitários Comuns, depende de você.
E. Transmissão de dados por meio de intents e interface parcelável.
Depende das necessidades do seu projeto.
A. Banco de dados
SQLite é um banco de dados de código aberto embutido no Android. O SQLite oferece suporte a recursos de banco de dados relacional padrão, como sintaxe SQL, transações e instruções preparadas.
Tutoriais - http://www.vogella.com/articles/AndroidSQLite/article.html
B. Preferências compartilhadas
Suponha que você queira armazenar o nome de usuário. Portanto, haverá agora duas coisas: um nome de usuário chave e um valor de valor.
Como armazenar
Usando putString (), putBoolean (), putInt (), putFloat (), putLong (), você pode salvar o tipo de dados desejado.
Como buscar
http://developer.android.com/reference/android/content/SharedPreferences.html
C. Serialização de Objeto
A serlização de objeto é usada se quisermos salvar um estado de objeto para enviá-lo pela rede ou você também pode usá-lo para seu propósito.
Use java beans e armazene-os como um de seus campos e use getters e setter para isso
JavaBeans são classes Java que possuem propriedades. Pense nas propriedades como variáveis de instância privadas. Como são privados, a única maneira de acessá-los de fora da classe é por meio de métodos na classe. Os métodos que alteram o valor de uma propriedade são chamados de métodos setter e os métodos que recuperam o valor de uma propriedade são chamados de métodos getter.
Defina a variável em seu método de e-mail usando
Em seguida, use a serialização de objeto para serializar esse objeto e, em sua outra classe, desserialize esse objeto.
Na serialização, um objeto pode ser representado como uma sequência de bytes que inclui os dados do objeto, bem como informações sobre o tipo do objeto e os tipos de dados armazenados no objeto.
Depois que um objeto serializado é gravado em um arquivo, ele pode ser lido do arquivo e desserializado, ou seja, as informações de tipo e bytes que representam o objeto e seus dados podem ser usados para recriar o objeto na memória.
Se você quiser um tutorial para isso, consulte este link
http://javawithswaranga.blogspot.in/2011/08/serialization-in-java.html
Obter variável em outras classes
D. CommonUtilities
Você pode fazer uma classe por conta própria que pode conter dados comuns que você freqüentemente precisa em seu projeto.
Amostra
E. Passagem de dados por intents
Consulte este tutorial para esta opção de transmissão de dados.
http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/
fonte
você não tem que ...
Basta chamar newIntent () da segunda atividade
Adicione dados para transmitir de volta
Vá em frente com setResult
E pode então terminar
fonte
startActivityForResult ()
E aqui está um link do SDK com mais informações:
http://developer.android.com/guide/apethoscope/faq/commontasks.html#opennewscreen
e role para baixo até a parte intitulada "Retornando um resultado de uma tela"
fonte
Costumo usar variáveis estáticas na atividade de chamada com métodos setter estáticos para defini-las.
Desta forma, posso alterar os valores em qualquer atividade à vontade, independentemente do fluxo exato de controle entre as várias atividades.
Observe que esse truque só pode ser usado se você não se importar com a instanciação de mais de uma cópia da mesma atividade (classe) no aplicativo, embora eu ache que seja o mais fácil de implementar, e eu o uso mais .
fonte
A melhor maneira de fazer aqui é colocar a variável em uma classe comum que é definida fora do escopo
dentro do seu código (por exemplo, OnButtonClick etc ...)
dentro do código de
@Override public void onActivityResult (int requestCode, int resultCode, Intent data) {if (requestCode == Keys.PICK_CONTACT) {if (resultCode == Activity.RESULT_OK) {Uri contactData = data.getData ();
fonte