将第二个活动中的parcelable对象的值检索到调用第二个活动的mainActivity

时间:2014-06-14 17:50:35

标签: android android-intent parcelable

我有一个实现Parcelable类的类。从主要活动中,我传递了一个可分割的对象。在第二个活动中,我检索objet并使用objet来更改数据。一切都好。但问题是当我需要从第二个活动检索此更改到主活动时。我不知道怎么办。

这里是主要活动中的电话:

public class MainActivity extends Activity {
Tgestion Tges= new Tgestion();
Button buttonI,buttonM,buttonB,buttonD,buttonS; 

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    addListenerOnButton();
}

public void addListenerOnButton() {

    final Context context = this;

    buttonI = (Button) findViewById(R.id.buttonIntroducir);

    buttonI.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) { 
            Intent intent = new Intent(context, IntroducirPatron.class);
            intent.putExtra("com.example.sistemacontrasena.gestion", Tges);
            startActivity(intent);               

        }

    });
}
}

Tges是一个实现parcelable类的对象。 在第二项活动中:

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_introducir_patron);

    // --- Obtenemos objeto Parcelable desde el Intent
    this.gestion=getIntent().getParcelableExtra("com.example.sistemacontrasena.gestion");

}

在此之后我设置了一些更改,例如this.gestion.setSecret(value); 当我关闭第二个活动时,在主活动中,我不知道如何使用我放置的值来检索this.gestion.getSecret()。我怎么能这样做?

class parcelable是:

import android.os.Parcel;
import android.os.Parcelable;


public class Tgestion implements Parcelable{

private String[] secret;


public Tgestion(){

    this.secret=new String[2];

}


/**
 * Constructor Tgestion para parcel.
 * @param source
 */
private Tgestion(Parcel source) {
    this.secret=new String[2];
    readFromParcel(source);

}

public void setSecret(String[] s){

    for (int i=0;i<this.secret.length;i++){

        this.secret[i]=s[i];

    }

}

public String[] getSecret(){

    return this.secret;
}   

@Override
public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public void writeToParcel(Parcel destino, int flags) {
    // TODO Auto-generated method stub
    destino.writeStringArray(this.secret);
}

private void readFromParcel(Parcel in){

    in.readStringArray(this.secret);
}


public static final Parcelable.Creator<Tgestion> CREATOR = new Parcelable.Creator<Tgestion>() {

    @Override
    public Tgestion createFromParcel(Parcel source) {
        return new Tgestion(source);
    }

    @Override
    public Tgestion[] newArray(int size) {
        return new Tgestion[size];
    }
};

}

1 个答案:

答案 0 :(得分:3)

您不能只更改Parcelable并期望第一项活动能够看到这些更改。 Parcelables被序列化和反序列化,这意味着你有一个新的副本。

您应该使用startActivityForResult()setResult()(在第二个活动中)和onActivityResult()(在第一个活动中)来返回数据。

请参阅文档中的Getting a Result from an Activity