2011-09-21 5 views
1

Im complètement nouveau à Android alors excuses si c'est une question idiote. Mais mon problème est le suivant:définir le texte dans le texte avec le texte d'un edittext dans une autre classe

J'ai créé un certain nombre de classes pour chacune des pages de mon application et je voudrais mettre à jour le texte dans une textview d'une classe particulière à partir du texte d'un champ edittext d'une autre classe . Pour être plus précis, j'ai une page de connexion et je veux que le nom d'utilisateur (entré par l'utilisateur dans une boîte d'édition) soit transféré à un champ de texte dans la page connectée. Actuellement, je suis en train de le faire en utilisant un écouteur de clic pour le bouton de connexion dans le journal à la page:

public void sign_in_click(View view) { 
    EditText tv1 = (EditText) findViewById(R.id.txt_input_uname); 

    String username=tv1.getText().toString(); 

    LoginDetails unamede=new LoginDetails(); 
    unamede.setuname(username); 

    Intent myIntent = new Intent(view.getContext(), customer.class); 
    startActivityForResult(myIntent, 0); 

} 

Ainsi l'auditeur de clic initialise une nouvelle variable de classe I ai défini dans une autre classe comme ceci:

public class LoginDetails { 
public String uname; 

public void setuname(String username){ 
     uname=username;  
} 

public String getuname(){ 
    return uname; 
} 
} 

et il donne uname le nom d'utilisateur de la boîte edittext dans la page de connexion.

Ensuite, je dois en connecté page sous oncreate:

LoginDetails unamed= LoginDetails(); 
String username=unamed.getuname(); 

tv1.setText(username); 

mais le texte dans la zone textview ne marche pas obtenir quoi que ce soit écrit à elle. Maintenant, je ne serai pas surpris si je fais cela complètement faux, mais tout conseil serait très apprécié. merci

+0

oups ouais oublié à ce sujet. Pardon. accepté maintenant – fp30

+0

Pas de problème. Je voulais juste donner un indice que c'est une bonne habitude d'accepter des réponses pour indiquer ce qui a fonctionné pour vous afin que d'autres personnes sachent et honorent l'effort de quelqu'un qui vous a donné la bonne réponse ;-) – Knickedi

Répondre

1

Ce que je suggère est de mettre les informations de connexion de l'utilisateur dans une SharedPreference. Pour transférer la date à une autre activité.

Par exemple ...

SharedPreferences myPrefs = getSharedPreferences("USER_INFO", 0); 
myPrefsEdit.putString("USER_ID", username=tv1.getText().toString();); 
//This is the username you get from edittext 

myPrefsEdit.putString("PASSWORD", password); 
//this is the user password you get from edittext 

myPrefsEdit.commit(); 

Dans votre prochaine activité.

Obtenir une référence à votre SharePreference comme ...

SharedPreferences info = getSharedPreferences("USER_INFO, 0); 
String username = info.getString("USER_ID", "DOESNT EXIST"); 
String userpassword = info.getString("PASSWORD", "DOESNT EXIST"); 

Cela devrait le faire

+0

Où vous voyez "n'existe pas" dans le code est ce qui se passe si l'user_id n'est pas là. Vous pouvez mettre tout ce que vous voulez ici. Ou vous pouvez le définir à null. Et tester pour voir si le nom d'utilisateur == null et si oui, lancer un AlertDialog indiquant à l'utilisateur de se connecter. –

+0

merci pour la réponse. Je vais certainement essayer cette méthode. Sur une note légèrement différente (mais étroitement liée) n'est-il pas possible de se référer à une vue (par exemple, textbox, edittext etc.) d'une autre activité juste en utilisant son id? sinon, quel est exactement le point du fichier r.id? il a les identifiants pour tous les éléments que j'utilise dans mon application mais je peux seulement me référer à l'élément avec son identifiant de l'activité dans laquelle il est placé? cela semble stupide pour moi – fp30

+0

C'est la façon dont android est construit. Si vous faites référence à une vue dans une activité, la mise en page DOIT contenir le widget ou la mise en page que vous avez.id dans votre activité. –

0

Vous pouvez essayer de mettre le nom d'utilisateur pour but d'activité supplémentaire (si vous ne voulez pas qu'il persistera dans la partagée preferenced en ce moment):

Intent myIntent = new Intent(view.getContext(), customer.class); 
myIntent.putExtra("uname", username); 
startActivityForResult(myIntent, 0); 

Et puis dans onCreate:

tv1.setText(getIntent().getStringExtra("uname")); 
+0

Cela pourrait être bon aussi..SharedPreference est plus persistante et fiable aussi bien. –

+0

merci pour la réponse. La méthode de coder_for_life22 fonctionne très bien donc je m'en tiendrai à ça pour ce problème particulier. Mais je suis sûr que ce que vous avez suggéré sera utile ailleurs dans l'application. alors merci encore. – fp30

Questions connexes