我有3项活动。 Intent从Activity 1传递到Activity 2,其中包含一些用于DB事务的数据。从活动2数据和意图传递到活动3。
现在,我想从活动3转移到活动2,但是当活动2从活动1获得意图时,它会返回一些导致空例外的错误:/
所以,我想从活动3返回时刷新活动2,但没有意图或正确使用不影响数据的意图
答案 0 :(得分:1)
从Acivity1启动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();
并在First Activity中接收数据为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");
}
}
}
或强>
你可以用它 在 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);
}
}
}
或强>
您也可以使用SharedPreferences在活动之间共享数据
答案 1 :(得分:0)
您可以使用接口来实现此目的。示例:在Activity3中,创建一个接口:
public class Activity2 extends Activity implements Activity3.Communicator, Serializable {
//You'll have to implement the method
public void receiveData(Object toSend) {
//do what you have to do with your object once it's been sent back.
}
}
然后按如下方式实现Activity2:
Activity3
为了使用此模式,您必须像使用意图一样启动Serializable
。我使用了Intent
,因为您希望通过 Intent intent = new Intent(this, Activity3.class);
intent.putExtra("activity2", this);
startActivity(intent);
传递活动的一个实例:
onCreate
您可以使用public class Activity3 extends Activity {
private Communicator mActivity2; //your activity
private Object mData; //Whatever object you want to send
public void onCreate(Bundle bundle) {
//...
Intent intent = getIntent();
Serializable object = intent.getSerializableExtra("activity2");
if (object != null && object instanceof Communicator) {
//make sure the object is not null and implements the Communicator
mActivity2 = (Communicator) object;
}
}
}
方法检索Activity3中的Activity2对象:
Activity3
在onBackPressed
完成后(关闭后),您实施了onDestroy
或 @Override
public void onDestroy() { //better if the back button is not pressed
super.onDestroy();
if (mActivity2 != null) { //check if is not null
mActivity2.receiveData(mData);
}
}
等方法,如下所示:
{{1}}
您的活动应该在不使用意图的情况下进行更新。
顺便说一句,使用这种模式的Fragments比活动更好。你应该使用片段。