2017-08-09 3 views
0

Ich bin neu in Android-Programmierung, ich möchte eine Android-Anwendungen erstellen, die Benutzereingabe in MainActivity benötigen dann den Benutzernamen in einer anderen Aktivität anzeigen. Ich plane, 5 weitere Aktivitäten zu erstellen, um den Benutzernamen anzuzeigen. diese ist die MainActivity:Verteilen Sie einen Bearbeitungstext auf viele TextViews

public class MainActivity extends AppCompatActivity { 

Button button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    button = (Button) findViewById(R.id.start); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(MainActivity.this, Quiz1Activity.class); 
      getMenuInflater().toString(); 
      sendName(); 
      startActivity(intent); 
     }}); 
} 

public void sendName(){ 
    Intent intent = new Intent(MainActivity.this, Quiz1Activity.class); 
    EditText inputnama = (EditText) findViewById(R.id.inputnama); 
    intent.putExtra("username", message); 
} 

und das ist new1Activity

Intent username = getIntent(); 
String username1 = getIntent().getStringExtra("username1"); 

i den gleichen Code auf eine andere neue Aktivität verwendet, aber es zeigen nicht alles. kann mir jemand erklären, was los ist?

+0

kein neues Objekt erstellen sondern nur Daten in das erste Objekt der Absicht einfügen –

+1

Eine etwas einfachere Lösung wäre, den eingegebenen Benutzernamen in 'SharedPreferences' zu speichern und ihn aus den SharedPreferences in jeder anderen Aktivität zu laden. Schneidet auch alle absichtsbasierten Übergaben des besagten Parameters aus ... es liegt jedoch bei Ihnen oder dem Kunden zu entscheiden, ob dies ein Datenschutzproblem ist oder nicht. – Shark

Antwort

0
EditText inputName = (EditText) findViewById(R.id.inputnama);  

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

     if(inputName != null){ 
      String message = inputName.getText().toString(); 

      SharedPreferences sharedPreferences = getSharedPreferences("prefName", 0); 
      SharedPreferences.Editor editor = sharedPreferences.edit(); 
      editor.putString("username", message); 
      editor.apply(); 
      editor.commit(); 

      startActivity(new Intent(MainActivity.this, Quiz1Activity.class); 
     } 

    }}); 

In QuizActivity und anderen Aktivitäten

SharedPreferences sharedPreferences = getSharedPreferences("prefName", 0); 
String userName = sharedPreferences.getString("username", ""); 
+0

Während dies die Frage beantworten kann, sollten Sie einige Erklärung mit Ihrem Code hinzufügen. Berücksichtigen Sie zukünftige Benutzer, die möglicherweise kommen. Gib auch nicht einfach Code an, erkläre das Problem. – Nathan

+0

Was ist diese "Nachricht", die als Extra weitergegeben wird? – Shark

+1

@Shark überprüfen aktualisierte Antwort – MinnuKaAnae

0

Werte in Intent speichern;

Intent intent = new Intent(MainActivity.this, Quiz1Activity.class); 
    EditText inputnama = (EditText) findViewById(R.id.inputnama); 
    intent.putExtra("username", inputnama.getText().toString()); 

Werte mithilfe von Intent abrufen;

String username1 = getIntent().getStringExtra("username"); 
+0

Ich habe genug Beschreibung hinzugefügt dude .... Ich glaube nicht, dass ich mehr Beschreibung hinzufügen muss, um dieses Thema zu verstehen.Vielen Dank für Ihre Aufmerksamkeit –

+0

@Nathan diese Antwort erklärt eigentlich sehr gut, wie man Extras über 'Intent's sendet/empfängt. Es wird nicht viel "beschreibender Text" benötigt, weil das OP einfach nicht die richtige Absicht startet - er ruft eine Methode auf, die eine lokale Absicht erzeugt, aber die Absicht von der Aufrufmethode aus ausführt - die 'onClick()' Methode, die es beschattet . Seine 'sendName()' Implementierung ist eine Art toter Code, weil sie nur ein lokales Objekt erzeugt, das nirgendwo benutzt wird. – Shark

+0

Danke Shark plzz upvote meine Antwort. –

0

Wenn ich die Frage richtig verstanden müssen Sie dies bei Ihrer Tätigkeit beginnen:

Intent intent = new Intent(); 
intent.putExtra("userName", userName); 
startActivity(intent); 

und den Namen in der neuen Tätigkeit zu erhalten:

getIntent().getExtras().getString("userName"); 
0

verwenden clicklistener.

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new 
       Intent(MainActivity.this,Quiz1Activity.class); 
       getMenuInflater().toString(); 
       EditText inputnama = (EditText) findViewById(R.id.inputnama); 
       intent.putExtra("username", inputnama.getText().toString()); 
       startActivity(intent); 
      }}); 
+0

Während dies die Frage beantworten kann, sollten Sie einige Erklärung mit Ihrem Code hinzufügen. Berücksichtigen Sie zukünftige Benutzer, die möglicherweise kommen. Gib auch nicht einfach Code an, erkläre das Problem. – Nathan

+0

Was ist diese "Nachricht", die als Extra weitergegeben wird? – Shark

0

In Ihrer onClick Methode erklären Sie:

Intent intent = new Intent(MainActivity.this, Quiz1Activity.class);.

Dann in sendName(), Sie haben:

Intent intent = new Intent(MainActivity.this, Quiz1Activity.class);.

Sie sollten verstehen, dass diese beiden Absichten nicht gleich sind, sie sind zwei verschiedene Objekte. Die Änderungen an einem werden sich nicht auf den anderen auswirken.

Also Ihre intent in onClick wurde nicht geändert. Was Sie tun möchten, ist, die modifizierte Absicht von sendName, etwas wie startIntent(sendName()); zurückzugeben.

Zusätzlich können Sie intent als Parameter in sendName übergeben.

+0

Das Übermitteln des 'Intent' an die Methode' sendName() 'klingt nach einer anständigen Idee. Oder das Verschieben der 'startActivity (intent);' am Ende von 'sendName()' funktioniert auch. – Shark

Verwandte Themen