How to pass data from 2nd activity to 1st activity when pressed back? - android
我有两个活动,活动1和活动2。
在
在
我想在Activity1的文本视图中显示从Activity2的EditText中检索到的数据,当从Activity2按下Back时。
有人能帮我写代码吗?
使用
例如:
在Activity1中,启动Activity2为:
1 2 | Intent i = new Intent(this, Activity2.class); startActivityForResult(i, 1); |
在activity2中,使用
1 2 3 4 | Intent intent = new Intent(); intent.putExtra("editTextValue","value_here") setResult(RESULT_OK, intent); finish(); |
在活动1中,使用
1 2 3 4 5 6 7 8 | 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"); } } } |
如果可以,还可以使用sharedreferences在活动之间共享数据。
活动1应使用
activity2应该使用
在Actuviy2中,
1 2 3 4 5 6 7 | @Override public void onBackPressed() { String data = mEditText.getText(); Intent intent = new Intent(); intent.putExtra("MyData", data); setResult(resultcode, intent); } |
在活动1中,
1 2 3 4 5 6 7 8 | onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK) { String myStr=data.getStringExtra("MyData"); mTextView.setText(myStr); } } } |
当我把
1 2 3 4 5 6 7 8 | @Override public void onBackPressed() { //super.onBackPressed(); Intent i = new Intent(); i.putExtra(EXTRA_NON_DOWNLOADED_PAGES, notDownloaded); setResult(RESULT_OK, i); finish(); } |
在第一个活动中:
1 2 3 4 5 6 7 8 9 10 11 | @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; } } } |
把它作为startActivityforResult的替代方法,但是要记住,在这种情况下,这种方法在性能方面可能很昂贵,但在某些情况下,您可能需要使用它。
在Actuviy2中,
1 2 3 4 5 6 7 8 | @Override public void onBackPressed() { String data = mEditText.getText(); SharedPreferences sp = getSharedPreferences("LoginInfos", 0); Editor editor = sp.edit(); editor.putString("email",data); editor.commit(); } |
在活动1中,
1 2 3 4 5 | @Override public void onResume() { SharedPreferences sp = getSharedPreferences("LoginInfos", 0); String dataFromOtherAct= sp.getString("email","no email"); } |
从FirstActivity使用startActivityForResult()方法调用第二个Activity。
例如:
1 2 | Intent i = new Intent(this, SecondActivity.class); startActivityForResult(i, 1); |
在第二个活动中,设置要返回到第一个活动的数据。如果你不想回来,就不要再做任何设置。
例如:在secondactivity中,如果要发送回数据:
1 2 3 4 | Intent returnIntent = new Intent(); returnIntent.putExtra("result",result); setResult(Activity.RESULT_OK,returnIntent); finish(); |
如果不想返回数据:
1 2 3 | Intent returnIntent = new Intent(); setResult(Activity.RESULT_CANCELED, returnIntent); finish(); |
现在,在FirstActivity类中,为OnActivityResult()方法编写以下代码。
1 2 3 4 5 6 7 8 9 10 11 | @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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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"); } } } |
从这里开始,您可以使用startActivityForResult(mrequestcode,activity2.class)启动activity2.class;
现在这是您的第二个活动,name是activity2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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); } } |
现在,当您完成第二个活动时,您可以从onbackpress()调用setresult()方法,或者从任何按钮单击,当您的活动2将被破坏时,您的活动1的回调方法onactivityresult()将从那里调用,您可以从intent获取数据。
希望它能对你有所帮助……:)
阅读这些:
这些文章将帮助您理解如何在Android中的两个活动之间传递数据。
我有一个问题,我想用我做的软按钮发送数据类型,软键是每个安卓设备的默认值,所以我做了这个,首先我在我的"a"
1 2 3 4 5 | Intent intent = new Intent(); intent.setClass(context, _AddNewEmployee.class); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivityForResult(intent, 6969); setResult(60); |
然后在我的第二个活动中,我在我的"b"
1 | private static int resultCode = 40; |
然后,在我成功地提出请求后,或者每当我想告诉"A"活动这项工作已经成功完成时,将resultcode的值更改为我在"A"
1 2 3 4 5 6 7 8 9 10 11 | private void backToSearchActivityAndRequest() { Intent data = new Intent(); data.putExtra("PhoneNumber", employeePhoneNumber); setResult(resultCode, data); finish(); } @Override public void onBackPressed() { backToSearchActivityAndRequest(); } |
PS:如果你想让它正常工作,记得从onbackpressed方法中删除
然后我也应该在我的"A"活动中调用
1 2 3 4 5 6 7 8 9 10 11 | @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(); } } } |
就这样,希望它能帮助你。快速编码;
tl;dr使用
长回答:
您应该从阅读Android开发人员文档开始。具体来说,您问题的主题在
例如代码,android sdk提供了很好的例子。另外,这里的其他答案也提供了一些要使用的示例代码的简短片段。
但是,如果您正在寻找替代方案,请阅读此问题。这是关于如何将