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 Activity1
mam 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?
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.
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);
}
}
}
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;
}
}
}
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");
}
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:
- Return result to onActivityResult()
- 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.
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...:)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
}
}
}
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.
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;
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