Jak przekazać dane z 2. aktywności do 1. aktywności po naciśnięciu wstecz? - android

Mam 2 aktywności, Aktywność1 i Aktywność2 .

W Activity1mam Przyciski TextView. Po kliknięciu przycisku uruchamiana jest aktywność2 .

In Activity2 I ' ve an EditText .

Chcę wyświetlić dane pobrane z EditText w Actifity2 W TextView W Actifity1 po naciśnięciu back z Actifity2 .

Czy ktoś może mi pomóc z kodem, aby to praca?

Author: ישו אוהב אותך, 2013-01-12

9 answers

Rozpocznij Aktywność2 z startActivityForResult i użyj metody setResult do wysyłania danych z aktywności2 do aktywności1. W Activity1 musisz zastąpić onActivityResult w celu aktualizacji TextView z EditText danymi z Activity2.

Na przykład:

In Activity1, start Activity2 as:

Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);

W Aktywność2, użyj setResult do wysyłania danych z powrotem:

Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);        
finish();

I w aktywności1, otrzymujemy dane z 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");
         }     
    }
} 

Jeśli możesz, również użyj SharedPreferences do udostępniania danych między działaniami.

 243
Author: ρяσѕρєя K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 19:33:41

Aktywność1 powinna rozpocząć Aktywność2 od startActivityForResult().

Activity2 powinno używać setResult() do wysyłania danych z powrotem do Activity1.

In Activity2 ,

@Override
public void onBackPressed() {
    String data = mEditText.getText();
    Intent intent = new Intent();
    intent.putExtra("MyData", data);
    setResult(resultcode, intent);
}

W Aktywności1 ,

onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == RESULT_OK) {
            String myStr=data.getStringExtra("MyData");
            mTextView.setText(myStr);
        }
    }
}
 17
Author: Swayam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 07:20:23

Inne odpowiedzi nie działały, gdy wrzucałem setResult do onBackPressed. Komentowanie połączenia do super onBackPressed i wywołanie finish ręcznie rozwiązuje problem:

@Override
public void onBackPressed() {
    //super.onBackPressed();
    Intent i = new Intent();
    i.putExtra(EXTRA_NON_DOWNLOADED_PAGES, notDownloaded);
    setResult(RESULT_OK, i);
    finish();
}

I w pierwszej aktywności:

@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;
        }
    }
}
 9
Author: FindOut_Quran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-05 03:19:54

Weź to jako alternatywę, aby rozpocząć działanie w celu osiągnięcia rezultatu.Należy jednak pamiętać, że w takich przypadkach podejście to może być kosztowne pod względem wydajności, ale w niektórych przypadkach może być konieczne użycie.

W Działaniu2,

@Override
public void onBackPressed() {
String data = mEditText.getText();
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
Editor editor = sp.edit();
editor.putString("email",data);
editor.commit();
}

W Aktywności1,

 @Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String  dataFromOtherAct= sp.getString("email", "no email");
} 
 4
Author: katmanco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-26 15:03:25

Przeczytaj te:

  1. Return result to onActivityResult()
  2. pobieranie wyniku działania-samouczek Android dla początkujących

Te artykuły pomogą Ci zrozumieć, jak przekazywać dane między dwoma aktywnościami w Androidzie.

 2
Author: Dixit Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-07 10:34:09

To twoja pierwsza Aktywność1.

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

Od tego momentu rozpoczynasz swoją Aktywność2.Klasa przy użyciu startActivityForResult(mRequestCode, Activity2.Klasa);

Teraz to jest twoja druga aktywność, nazwa to 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);
}

}

Teraz, Kiedy skończysz z drugą aktywnością, wywołasz metodę setResult (), z onBackPress () lub z dowolnego przycisku, gdy Aktywność2 zniszczy, a następnie Aktywność1 ' s call back metoda onActivityResult () wywoła z tam możesz pobrać swoje dane z intent..

Mam nadzieję, że to ci pomoże...:)
 1
Author: vishesh chandra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-12 10:50:23

Od pierwszej aktywności wywołaj drugą aktywność używając metody startActivityForResult ().

Na przykład:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

W SecondActivity Ustaw dane, które chcesz wrócić z powrotem do FirstActivity. Jeśli nie chcesz wracać, Nie ustawiaj żadnych.

Na przykład: w secondActivity jeśli chcesz przesłać dane zwrotne:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

Jeśli nie chcesz zwracać danych:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

Teraz w swojej pierwszej klasie Activity napisz następujący kod dla onActivityResult() metoda.

@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
        }
    }
}
 1
Author: Manoj Reddy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-26 11:16:27

TL; DR Use Activity.startActivityForResult

Długa odpowiedź:

Powinieneś zacząć od przeczytania dokumentacji dewelopera Androida. Konkretnie temat Twojego pytania jest poruszony w Starting Activities and Getting Results sekcja dokumentacji Activity.

Jak na przykład kod, Android SDK dostarcza dobrych przykładów. Ponadto inne odpowiedzi tutaj dają krótkie fragmenty przykładowego kodu do użycia.

Jeśli jednak szukasz alternatywy, przeczytaj to pytanie . To jest dobra dyskusja o tym, jak używać startActivityForResults z fragmentami, a także kilka innych podejść do przekazywania danych między działaniami.

 0
Author: Franci Penov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:47

I mam problem, który chciałem zrobić to wysyłanie danych typu w miękkim przycisku, który zrobiłem i softKey, który jest domyślny w każdym urządzeniu z Androidem, więc zrobiłem to, najpierw zrobiłem Intent w moim "A" Activity:

            Intent intent = new Intent();
            intent.setClass(context, _AddNewEmployee.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivityForResult(intent, 6969);
            setResult(60);

Następnie w mojej drugiej aktywności, zadeklarowałem pole w moim "B" Activity:

private static int resultCode = 40;

Następnie po złożeniu mojej prośby z powodzeniem lub kiedykolwiek chciałem powiedzieć aktywności "A", że to zadanie jest pomyślnie wykonane, zmień wartość resultCode na to samo powiedziałem w "a" Activity, które w moim przypadku jest "60", a następnie:

private void backToSearchActivityAndRequest() {
    Intent data = new Intent();
    data.putExtra("PhoneNumber", employeePhoneNumber);
    setResult(resultCode, data);
    finish();
}

@Override
public void onBackPressed() {
    backToSearchActivityAndRequest();
}

PS: pamiętaj, aby usunąć Super z metody onBackPressed, jeśli chcesz, aby to działało poprawnie.

Wtedy też w mojej aktywności "A" powinienem wywołać metodę onActivityResult:

   @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();
            }
        }
    }

To jest to, mam nadzieję, że to ci pomoże. # HappyCoding;

 0
Author: Arash Afshar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 10:35:23