Como passar os valores de uma atividade para atividade anterior
-
13-09-2019 - |
Pergunta
Como faço para passar um valor de uma tela para a tela anterior?
Considere este caso: Eu tenho duas atividades. A primeira tela tem uma TextView
e um botão e a segunda atividade tem uma EditText
e um botão.
Se eu clicar no botão primeiro, então ele tem que passar para segunda atividade e aqui usuário tem que digitar algo na caixa de texto. Se ele aperta o botão da segunda tela, em seguida, os valores de caixa de texto deve mover-se para a primeira atividade e que deve ser exibido na primeira TextView
actividade.
Solução
Para ações de captura realizada em uma atividade dentro de outro requer três etapas.
lançar a actividade secundária (o seu 'Editar texto' Atividade) como um subatividade usando startActivityForResult
de sua atividade principal.
Intent i = new Intent(this,TextEntryActivity.class);
startActivityForResult(i, STATIC_INTEGER_VALUE);
Dentro do subatividade, ao invés de apenas fechando o Activity quando um usuário clica no botão, você precisa criar uma nova Intenção e incluem o valor texto inserido em seus extras pacote. Para passá-lo de volta para o setResult
chamada pai antes de chamar finish
para fechar a atividade secundária.
Intent resultIntent = new Intent();
resultIntent.putExtra(PUBLIC_STATIC_STRING_IDENTIFIER, enteredTextValue);
setResult(Activity.RESULT_OK, resultIntent);
finish();
O passo final é na Atividade vocação: Override onActivityResult
para ouvir chamadas de retorno da atividade de entrada de texto. Obter o extra da retornou Intenção de obter o valor de texto você deve estar exibindo.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode) {
case (STATIC_INTEGER_VALUE) : {
if (resultCode == Activity.RESULT_OK) {
String newText = data.getStringExtra(PUBLIC_STATIC_STRING_IDENTIFIER);
// TODO Update your TextView.
}
break;
}
}
}
Outras dicas
Existem algumas maneiras pelas quais você pode acessar variáveis ??ou objeto em outras classes ou atividade.
A. Banco de dados
B. preferências compartilhados.
C. Serialização de objetos.
D. Uma classe que pode armazenar dados comuns pode ser nomeado como utilitários comuns que depende de você.
E. Passando dados através de intentos e Parcelable Interface.
É depender de suas necessidades do projeto.
A. Banco de Dados
SQLite é um banco de dados Open Source que está embutido em Android. SQLite suporta recursos de banco de dados relacionais padrão, como sintaxe SQL, transações e declarações preparadas.
Tutoriais - http://www.vogella.com/articles/AndroidSQLite/ article.html
B. Preferências compartilhadas
Suponha que você deseja armazenar nome de usuário. Portanto, haverá agora dois coisa que um Key Nome de usuário, Valor Valor.
Como armazenar
// Create object of SharedPreferences.
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
//now get Editor
SharedPreferences.Editor editor = sharedPref.edit();
//put your value
editor.putString("userName", "stackoverlow");
//commits your edits
editor.commit();
Usando putString (), putBoolean (), putInt (), putFloat (), putLong () você pode salvar seu dtatype desejado.
Como buscar
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String userName = sharedPref.getString("userName", "Not Available");
http://developer.android.com/reference/android/content /SharedPreferences.html
C. serialização objeto
serlization objeto é utilizado, se quisermos salvar um estado de objeto para enviá-lo através da rede ou você pode usá-lo para sua finalidade também.
Utilize Java Beans e armazenar nele como um de seus campos e uso getters e setter para essa
JavaBeans são classes Java que têm propriedades. Imagine propriedades como variáveis ??de instância privadas. Como eles são privados, a única maneira eles podem ser acessados ??de fora da sua classe é através de métodos na classe. o métodos que mudam o valor de uma propriedade são chamados setter métodos e os métodos que recuperar o valor de uma propriedade são chamados métodos getter.
public class VariableStorage implements Serializable {
private String inString ;
public String getInString() {
return inString;
}
public void setInString(String inString) {
this.inString = inString;
}
}
Defina a variável em que você método de email usando
VariableStorage variableStorage = new VariableStorage();
variableStorage.setInString(inString);
Em seguida, use objeto Serialzation para serializar este objeto e na sua outra classe desserializar este objeto.
serialização um objecto pode ser representada como uma sequência de bytes, que inclui dados do objecto, bem como informações sobre o tipo do objecto e os tipos de dados armazenados no objecto.
Depois de um objeto serializado foi escrito em um arquivo, ele pode ser lido a partir do arquivo e desserializado que é, bytes o tipo de informação e que representam o objeto e seus dados podem ser usados ??para recriar o objeto na memória.
Se você quiser tutorial para este enviamos esta ligação
http://javawithswaranga.blogspot.in/2011/08 /serialization-in-java.html
Get variável em outras classes
D. CommonUtilities
Você pode fazer uma classe por si mesmo que pode conter dados comuns que você freqüentemente precisa em seu projeto.
Amostra
public class CommonUtilities {
public static String className = "CommonUtilities";
}
E. Passando dados através de Intenções
Por favor, consulte este tutorial para esta opção de passar dados.
Você não tem que ..
apenas chamar newIntenet () da segunda atividade
Intent retData=new Intent();
Adicionar dados para passar para trás
putExtras (retData.putExtra("userName", getUsrName()));
ir em frente com setResult
setResult(RESULT_OK, retData);
e pode então terminar
finish();
startActivityForResult ()
E aqui está um link a partir do SDK com mais informações:
http://developer.android.com/guide/appendix /faq/commontasks.html#opennewscreen
e desça até a parte intitulada "retornando um resultado de uma tela"
Costumo usar variáveis ??estáticas na atividade chamando com métodos setter estáticos para defini-los.
Desta forma posso alterar os valores em qualquer atividade à vontade, independentemente do fluxo exato de controle entre as várias actividades.
Note que este truque só pode ser usado se você não se preocupam com o instanciação de mais do que uma cópia da mesma actividade (classe) na aplicação, Mas eu achei que este seja o mais fácil de implementar, e eu usá-lo ao máximo.
A melhor maneira de fazer aqui é colocar variável a uma classe comum, que é definido fora do escopo
public class Utils
{
public static String mPosition;
}
dentro de seu código (por exemplo onButtonClick etc ...)
Intent intent = new Intent(Intent.ACTION_PICK,
ContactsContract.Contacts.CONTENT_URI);
Utils.mPosition = mViewData.mPosition + "";
LogHelper.e(TAG, "before intent: " + Utils.mPosition);
startActivityForResult(intent, Keys.PICK_CONTACT);
dentro do código de
@Override onActivityResult public void (requestCode int, resultCode int, Intenção de dados) { se (requestCode == Keys.PICK_CONTACT) { se (resultCode == Activity.RESULT_OK) { Uri DadosDeContato = data.getData ();
//you may use the variable here after intent result
LogHelper.e(TAG, "after intent: " + Utils.mPosition);
....