如何将数据从第二个活动传递到第一个活动? – android

我有2个活动, Activity1Activity2

Activity1我有一个ButtonTextView 。 当button被点击Activity2被启动。

Activity2我有一个EditText

当从Activity2中按下后退时,我想要在Activity1中的TextView中显示从Activity2中的EditText中检索到的数据。

有人可以帮助我的代码,使这项工作?

使用startActivityForResult启动Activity2并使用setResult方法将数据从Activity2发送回Activity1。 在Activity1中,您需要重写onActivityResult以便使用Activity2中的EditText数据更新TextView

例如:

Activity1中 ,启动Activity2为:

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

Activity2中 ,使用setResult发回数据:

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

Activity1中 ,用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"); } } } 

如果可以,还可以使用SharedPreferences在活动之间共享数据。

Activity2中

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

Activity1中

 onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if(resultCode == RESULT_OK) { String myStr=data.getStringExtra("MyData"); mTextView.setText(myStr); } } } 

其他答案不工作时,我把setResult onBackPressed 。 评论打电话给超级onBackPressed和调用finish手动解决问题:

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

在第一个活动中:

 @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的替代方法。但请记住,对于这种情况,此方法在性能方面可能很昂贵,但在某些情况下,您可能需要使用该方法。

在Activity2中,

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

在Activity1中,

  @Override public void onResume() { SharedPreferences sp = getSharedPreferences("LoginInfos", 0); String dataFromOtherAct= sp.getString("email", "no email"); } 

阅读这些:

  1. 返回结果到onActivityResult()
  2. 从被调用的活动获取结果 – 初学者的Android教程

这些文章将帮助您了解如何在Android中的两个活动之间传递数据。

这是你的第一个Activity1。

 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 ;

现在这是你的第二个Activity,名字是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); } } 

现在,当您完成第二个Activity时,您可以调用setResult()方法,从onBackPress()或任何button单击时,当您的Activity2将销毁,然后您的Activity1的callback方法onActivityResult()将从那里调用,您可以从意图获取您的数据..

希望这对你有帮助… 🙂

从FirstActivity使用startActivityForResult()方法调用SecondActivity。

例如:

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

在你的SecondActivity中设置你想要返回到FirstActivity的数据。 如果你不想返回,不要设置任何。

例如:在secondActivity中如果你想发回数据:

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

如果你不想返回数据:

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

现在在你的FirstActivity类中为onActivityResult()方法写下面的代码。

 @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 } } } 

TL; DR使用Activity.startActivityForResult

很长的回答:

您应该先阅读Android开发者文档。 具体而言,您的问题的主题在Activity文档的“ Starting Activities and Getting Results部分中进行了介绍。

至于示例代码,Android SDK提供了很好的例子。 另外,这里的其他答案给你简短的示例代码片段使用。

但是,如果你正在寻找替代品,请阅读这个问题 。 这是一个很好的讨论如何使用startActivityForResults与片段,以及两种方法之间传递数据的活动。