kum*_*ded 169 android parent-child pass-data android-activity
我有2个活动,Activity1和Activity2.
在Activity1我有一个按钮和TextView的.单击按钮时,将启动Activity2.
在Activity2我的EditText中.
我想显示从检索到的数据的EditText在活性2中的TextView在活性1当从压回活性2.
有人可以帮助我使用代码来完成这项工作吗?
ρяσ*_*я K 305
使用startActivityForResult和使用setResult方法将Activity2从Activity2发送回Activity1.在Activity1中,您需要覆盖onActivityResult以TextView使用EditTextActivity2中的数据进行更新.
例如:
在Activity1中,启动Activity2为:
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);
Run Code Online (Sandbox Code Playgroud)
在Activity2中,setResult用于发回数据:
Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);
finish();
Run Code Online (Sandbox Code Playgroud)
在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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果可以,也可以使用SharedPreferences在活动之间共享数据.
Swa*_*yam 24
活动1应该开始活性2用startActivityForResult().
Activity2应该用于setResult()将数据发送回Activity1.
在Activity2中,
@Override
public void onBackPressed() {
String data = mEditText.getText();
Intent intent = new Intent();
intent.putExtra("MyData", data);
setResult(resultcode, intent);
}
Run Code Online (Sandbox Code Playgroud)
在Activity1中,
onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String myStr=data.getStringExtra("MyData");
mTextView.setText(myStr);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Fin*_*ran 16
当我把其他的答案没有工作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();
}
Run Code Online (Sandbox Code Playgroud)
在第一项活动中:
@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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以使用this作为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();
}
Run Code Online (Sandbox Code Playgroud)
在活动1中,
@Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String dataFromOtherAct= sp.getString("email", "no email");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114892 次 |
| 最近记录: |