Ich habe 2 Aktivitäten, Activity1 und Activity2.
In Activity1
habe ich einen Button und TextView . Wenn der Button angeklickt wird, wird Activity2 gestartet.
In Activity2
habe ich einen EditText.
Ich möchte die Daten anzeigen, die aus EditText in Activity2 in der TextView in Activity1 abgerufen werden, wenn zurück von Activity2 gedrückt wird.
kann mir jemand mit dem Code helfen, damit dies funktioniert?
Starten Sie Activity2 mit startActivityForResult
und verwenden Sie die Methode setResult
, um Daten von Activity2 an Activity1 zurückzuschicken. In Activity1 müssen Sie onActivityResult
überschreiben, um TextView
mit EditText
-Daten aus Activity2 zu aktualisieren.
Zum Beispiel:
Starten Sie in Activity1 Activity2 als:
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);
Verwenden Sie in Activity2setResult
, um Daten zurückzusenden:
Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);
finish();
Und in Activity1 erhalten Sie Daten mit onActivityResult
:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String strEditText = data.getStringExtra("editTextValue");
}
}
}
Wenn möglich, verwenden Sie auch SharedPreferences , um Daten zwischen Aktivitäten auszutauschen.
Activity1 sollte starten Activity2 mit startActivityForResult()
.
Activity2 sollte setResult()
verwenden, um Daten an Activity1 zu senden
In Aktivität2 ,
@Override
public void onBackPressed() {
String data = mEditText.getText();
Intent intent = new Intent();
intent.putExtra("MyData", data);
setResult(resultcode, intent);
}
In Aktivität1 ,
onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String myStr=data.getStringExtra("MyData");
mTextView.setText(myStr);
}
}
}
Andere Antworten funktionierten nicht, wenn ich setResult
in onBackPressed
eingebe. Wenn Sie den Aufruf von super onBackPressed
kommentieren und finish
manuell aufrufen, wird das Problem gelöst:
@Override
public void onBackPressed() {
//super.onBackPressed();
Intent i = new Intent();
i.putExtra(EXTRA_NON_DOWNLOADED_PAGES, notDownloaded);
setResult(RESULT_OK, i);
finish();
}
Und in der ersten Aktivität:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == QUEUE_MSG) {
if (resultCode == RESULT_OK) {
Serializable tmp = data.getSerializableExtra(MainActivity.EXTRA_NON_DOWNLOADED_PAGES);
if (tmp != null)
serializable = tmp;
}
}
}
Nehmen Sie dies als Alternative zu startActivityforResult. Denken Sie jedoch daran, dass dieser Ansatz in solchen Fällen teuer sein kann, aber in einigen Fällen müssen Sie ihn verwenden.
In Aktivität2,
@Override
public void onBackPressed() {
String data = mEditText.getText();
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
Editor editor = sp.edit();
editor.putString("email",data);
editor.commit();
}
In Aktivität1,
@Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String dataFromOtherAct= sp.getString("email", "no email");
}
Rufen Sie in Ihrer FirstActivity die SecondActivity mit der Methode startActivityForResult () auf.
Zum Beispiel:
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);
Legen Sie in Ihrer SecondActivity die Daten fest, die Sie an FirstActivity zurückgeben möchten. Wenn Sie nicht zurückkehren möchten, setzen Sie keine.
Zum Beispiel: In secondActivity, wenn Sie Daten zurücksenden möchten:
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();
Wenn Sie keine Daten zurückgeben möchten:
Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();
Schreiben Sie nun in Ihre FirstActivity-Klasse folgenden Code für die onActivityResult () - Methode.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){
String result=data.getStringExtra("result");
}
if (resultCode == Activity.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
dies ist deine erste Aktivität1.
public class Activity1 extends Activity{
private int mRequestCode = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, Activity2.class);
startActivityForResult(intent, mRequestCode);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == mRequestCode && resultCode == RESULT_OK){
String editTextString = data.getStringExtra("editText");
}
}
}
Von hier aus starten Sie Ihre Activity2.class mit startActivityForResult (mRequestCode, Activity2.class);
Jetzt ist dies Ihre zweite Aktivität, der Name ist Activity2
public class Activity2 extends Activity {
private EditText mEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//mEditText = (EditText)findViewById(R.id.edit_text);
Intent intent = new Intent();
intent.putExtra("editText", mEditText.getText().toString());
setResult(RESULT_OK, intent);
}
}
Wenn Sie nun mit Ihrer zweiten Activity fertig sind, rufen Sie die setResult () - Methode auf, von onBackPress () oder von einem beliebigen Klick auf die Schaltfläche, wenn Ihre Activity2 zerstört wird. Dann wird Ihre Rückruf-Methode von Activity1 onActivityResult () von dort aus aufgerufen Ihre Daten aus Vorsatz ..
Hoffe es wird dir helfen ... :)
Lese das:
In diesen Artikeln erfahren Sie, wie Sie Daten zwischen zwei Aktivitäten in Android übertragen.
und ich habe ein Problem, bei dem ich das Senden des Datentyps in einem Soft Button, den ich gemacht hatte, und dem SoftKey, der in jedem Android-Gerät voreingestellt ist, ausführen wollte, also habe ich dies getan, zuerst habe ich eine Intent
in gemacht mein "A" Activity
:
Intent intent = new Intent();
intent.setClass(context, _AddNewEmployee.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent, 6969);
setResult(60);
In meiner zweiten Aktivität habe ich ein Feld in meinem "B" Activity
deklariert:
private static int resultCode = 40;
dann, nachdem ich meine Anfrage erfolgreich gestellt hatte oder immer, wenn ich der Aktivität "A" sagen wollte, dass dieser Job erfolgreich ausgeführt wurde, ändern Sie den Wert von resultCode auf den gleichen Wert, den ich in "A" Activity
angegeben habe. In meinem Fall ist "60" und dann:
private void backToSearchActivityAndRequest() {
Intent data = new Intent();
data.putExtra("PhoneNumber", employeePhoneNumber);
setResult(resultCode, data);
finish();
}
@Override
public void onBackPressed() {
backToSearchActivityAndRequest();
}
PS: Denken Sie daran, Super
aus der onBackPressed-Methode zu entfernen, wenn dies ordnungsgemäß funktionieren soll.
dann sollte ich auch die onActivityResult
-Methode in meiner A-Aktivität aufrufen:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 6969 && resultCode == 60) {
if (data != null) {
user_mobile = data.getStringExtra("PhoneNumber");
numberTextField.setText(user_mobile);
getEmployeeByNumber();
}
}
}
das ist es, hoffe es hilft dir. #HappyCoding;
TL; DR Verwendung Activity.startActivityForResult
Lange Antwort:
Sie sollten zunächst die Android-Entwicklerdokumentation lesen. Das Thema Ihrer Frage wird speziell im Abschnitt Starting Activities and Getting Results
der Activity
-Dokumentation behandelt.
Als Beispielcode bietet das Android SDK gute Beispiele. Andere Antworten geben Ihnen außerdem kurze Ausschnitte des zu verwendenden Beispielcodes.
Wenn Sie jedoch nach Alternativen suchen, lesen Sie diese SO - Frage . Dies ist eine gute Diskussion darüber, wie startActivityForResults
mit Fragmenten verwendet werden kann und wie andere Ansätze zum Übertragen von Daten zwischen Aktivitäten verwendet werden können.