我有2个活动,Activity1和Activity2。
在Activity1
我有一个按钮和TextView。单击该按钮时,将启动Activity2。
在Activity2
我有一个EditText。
我想显示从检索到的数据的EditText在活性2中的TextView在活性1当从压回活性2。
有人可以通过代码帮助我完成这项工作吗?
Activity2
将值放入持久性存储中并Activity1
从那里读取。
我有2个活动,Activity1和Activity2。
在Activity1
我有一个按钮和TextView。单击该按钮时,将启动Activity2。
在Activity2
我有一个EditText。
我想显示从检索到的数据的EditText在活性2中的TextView在活性1当从压回活性2。
有人可以通过代码帮助我完成这项工作吗?
Activity2
将值放入持久性存储中并Activity1
从那里读取。
Answers:
从开始Activity2,startActivityForResult
并使用setResult
将数据从Activity2发送回Activity1的方法。在Activity1中,您将需要重写onActivityResult
以TextView
使用EditText
Activity2中的数据进行更新。
例如:
在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在Activity之间共享数据。
活动1应该开始活性2用startActivityForResult()
。
Activity2应该用于setResult()
将数据发送回Activity1。
在活动2中,
@Override
public void onBackPressed() {
String data = mEditText.getText();
Intent intent = new Intent();
intent.putExtra("MyData", data);
setResult(resultcode, intent);
}
在活动1中,
onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String myStr=data.getStringExtra("MyData");
mTextView.setText(myStr);
}
}
}
当我把其他的答案没有工作setResult
在onBackPressed
。评论对super的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的替代方法。但是请记住,在这种情况下,这种方法的性能可能会很昂贵,但在某些情况下可能需要使用。
在活动2中,
@Override
public void onBackPressed() {
String data = mEditText.getText();
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
Editor editor = sp.edit();
editor.putString("email",data);
editor.commit();
}
在活动1中,
@Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String dataFromOtherAct= sp.getString("email", "no email");
}
这是您的第一个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。
现在这是您的第二个活动,名称是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之后,您可以从onBackPress()或从任何按钮单击中调用setResult()方法,当Activity2销毁时,将从那里调用Activity1的回调方法onActivityResult(),您可以从intent中获取数据..
希望对您有帮助... :)
在您的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开发人员文档。具体来说,您问题的主题Starting Activities and Getting Results
在Activity
文档介绍。
作为示例代码,Android SDK提供了很好的示例。另外,这里的其他答案也为您提供了一些简短的示例代码片段供您使用。
但是,如果您正在寻找替代品,请阅读此SO问题。这是关于如何使用startActivityForResults
片段以及活动之间传递数据的其他方法的很好的讨论。
我有一个问题想要在我制作的“软按钮”和每个Android设备中默认的“ softKey”中发送数据类型,所以我这样做了,首先我Intent
在“ A” Activity
:
Intent intent = new Intent();
intent.setClass(context, _AddNewEmployee.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent, 6969);
setResult(60);
然后在第二个活动中,我在“ B”中声明了一个字段Activity
:
private static int resultCode = 40;
然后,在我成功提出请求之后,或者每当我想告诉“ A”活动此工作成功完成时,都将resultCode的值更改为我在“ A”中所说的值Activity
,在我的情况下为“ 60”,然后:
private void backToSearchActivityAndRequest() {
Intent data = new Intent();
data.putExtra("PhoneNumber", employeePhoneNumber);
setResult(resultCode, data);
finish();
}
@Override
public void onBackPressed() {
backToSearchActivityAndRequest();
}
PS:Super
如果您希望此方法正常运行,请记住从onBackPressed方法中删除该方法。
那么我也应该onActivityResult
在“ A”活动中调用方法:
@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();
}
}
}
就是这样,希望它能对您有所帮助。#HappyCoding;
startActivityForResult