#android #android-intent #parcelable
#Android #android-намерение #разделяемый
Вопрос:
У меня есть класс, который реализует разделяемый класс. Из основного действия я передаю разделяемый объект. Во втором действии я извлекаю объект и использую объект для изменения данных. Все в порядке. Но проблема в том, что мне нужно извлечь эти изменения из второго действия в основное действие. Я не знаю, как я мог это сделать.
Здесь вызов в основном действии:
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(значение);
Когда я закрываю это второе действие, в основном действии я не знаю, как я могу получить this.gestion.getSecret() со значением, которое я ввел, например. Как я могу это сделать?
Класс 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:
Вы не можете просто изменить Parcelable
и ожидать, что первое действие увидит эти изменения. Пакеты сериализуются и десериализуются, что означает, что у вас есть новая копия.
Вы должны использовать startActivityForResult()
, setResult()
(во втором действии) и onActivityResult()
(в первом) для возврата данных.
См. Получение результата от действия в документах.