webentwicklung-frage-antwort-db.com.de

Wie übertrage ich die Daten von der zweiten Aktivität zur ersten Aktivität, wenn Sie sie zurückdrücken? - Android

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?

142
kumareloaded

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.

260

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);
        }
    }
}
18
Swayam

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;
        }
    }
}
13
FindOut_Quran

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");
} 
4
katmanco

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
        }
    }
}
2
Manoj Reddy

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 ... :)

2
vishesh chandra

Lese das:

  1. Ergebnis an onActivityResult () zurückgeben
  2. Abrufen des Ergebnisses aus einer aufgerufenen Aktivität - Android-Tutorial für Anfänger

In diesen Artikeln erfahren Sie, wie Sie Daten zwischen zwei Aktivitäten in Android übertragen.

2
Dixit Patel

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;

0
Arash Afshar

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.

0
Franci Penov