我有两个活动,Activity1和Activity2。
在Activity1中我有一个按钮和TextView。 当单击按钮时,Activity2启动。
在Activity2中,我有一个EditText。
我想在Activity1的TextView中显示从Activity2中的EditText检索到的数据,当从Activity2按回时。
有人能帮我写代码让它工作吗?
我有两个活动,Activity1和Activity2。
在Activity1中我有一个按钮和TextView。 当单击按钮时,Activity2启动。
在Activity2中,我有一个EditText。
我想在Activity1的TextView中显示从Activity2中的EditText检索到的数据,当从Activity2按回时。
有人能帮我写代码让它工作吗?
当前回答
这是你第一次参加活动。
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");
}
}
}
从这里你开始你的Activity2.class使用startActivityForResult(mRequestCode, 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);
}
}
现在,当你完成你的第二个活动,然后你调用setResult()方法,从onBackPress()或从任何按钮点击当你的Activity2将破坏然后你的Activity1的回调方法onActivityResult()将从那里调用,你可以从意图获得你的数据。
希望对你有所帮助…:)
其他回答
这是你第一次参加活动。
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");
}
}
}
从这里你开始你的Activity2.class使用startActivityForResult(mRequestCode, 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);
}
}
现在,当你完成你的第二个活动,然后你调用setResult()方法,从onBackPress()或从任何按钮点击当你的Activity2将破坏然后你的Activity1的回调方法onActivityResult()将从那里调用,你可以从意图获得你的数据。
希望对你有所帮助…:)
其他答案不工作时,我把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;
}
}
}
使用Activity.startActivityForResult
长一点的回答:
你应该从阅读Android开发者文档开始。具体地说,您的问题主题在活动文档的启动活动和获得结果部分中涵盖。
至于示例代码,Android SDK提供了很好的示例。另外,这里的其他答案为您提供了简短的示例代码片段。
然而,如果你正在寻找替代品,请阅读这个SO问题。这是一个关于如何在片段中使用startActivityForResults的很好的讨论,以及在活动之间传递数据的其他一些方法。
使用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在活动之间共享数据。
2021在java中的新更新后:
在MainActivity中使用activityresultlauncher()而不是startactivityforresult()。
ActivityResultLauncher<Intent> activityResultLaunch = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == 123) {
Intent data = result.getData();
String myStr = data.getStringExtra("MyData");
if (!TextUtils.isEmpty(myStr )) {
myTextView.setText(myStr);
}
}
}
});
在onCreate ():
myBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Second.class);
activityResultLaunch.launch(intent);
}
});
在SecondActivity内部(onCreate外部):
@Override
public void onBackPressed() {
String data = myEditText.getText().toString();
Intent intent = new Intent();
intent.putExtra("MyData", data);
setResult(123, intent);
finish();
}