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.

Foi útil?

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.

http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/

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);
....
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top