没有Intent的刷新活动

时间:2016-05-09 18:29:26

标签: java android

我有3项活动。 Intent从Activity 1传递到Activity 2,其中包含一些用于DB事务的数据。从活动2数据和意图传递到活动3。

现在,我想从活动3转移到活动2,但是当活动2从活动1获得意图时,它会返回一些导致空例外的错误:/

所以,我想从活动3返回时刷新活动2,但没有意图或正确使用不影响数据的意图

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比活动更好。你应该使用片段。