2016-03-30 3 views
2

Ich habe eine Vielzahl von Lösungen ausprobiert und kann nicht herausfinden, die beste Möglichkeit, dieses spezielle Problem zu implementieren, ohne billige Hacks (z. B. das Speichern von Daten zu gemeinsamen Präferenzen, etc.)Rückkehr (onClickBack) zu Aktivität, die serialiazable extra

ich habe eine Tätigkeit, die Daten aus den Vorsatz Extras erfordert:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_view_problem_set); 
    ButterKnife.bind(this); 

    this.problemSet = (ProblemSet) getIntent().getSerializableExtra("problemSet"); 
    ... 
} 

Wenn ein Benutzer klickt auf ein bestimmtes Problem im Problem-Set, habe ich eine neue Tätigkeit, die einfach nur angestoßen wird, zeigt Daten an, die mit einem bestimmten Problem in der Problemgruppe verknüpft sind. Beachten Sie, dass dies nur eine Ansicht der Daten ist (es ist nicht nötig, die Aktivität für das Ergebnis zu starten, da nichts zurückgegeben wird).

Wenn ich jedoch zurückklicke und zu der vorhandenen onCreate-Aktivität zurückkehre, sind die Intent-Extras null. Was ist der beste Weg, um mit dieser Art von Situation in Android umzugehen?

Ich habe Lösungsansätze ausprobiert, wie die extra zum savedInstanceState Speichern aber wenn onCreate meiner savedInstanceState genannt wird, ist nach wie vor null:

Losing Intent extras when returning to Activity

würde diese Daten auf der onPause Methode sinnvoller persistierenden machen?

Saving Android Activity state using Save Instance State

EDIT:

I implementiert, um die savedInstanceState Funktionalität noch scheint immer noch das gleiche Verhalten (leer Intent Extras und null savedInstanceState), wenn auf die vorherige Aktivität zurück. Ich habe folgende zur ersten Aktivität:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    Log.d(TAG, "ViewProblemSetActivity.onSaveInstanceState savedInstanceState=" + savedInstanceState); 
    super.onSaveInstanceState(savedInstanceState); 
    savedInstanceState.putSerializable("problemSet", problemSet); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    Log.d(TAG, "ViewProblemSetActivity.onRestoreInstanceState savedInstanceState=" + savedInstanceState); 
    super.onRestoreInstanceState(savedInstanceState); 
    this.problemSet = (ProblemSet)savedInstanceState.getSerializable("problemSet"); 
} 

@Override 
protected void onResume() { 
    Log.d(TAG, "ViewProblemSetActivity.onResume"); 
    super.onResume(); 
} 

@Override 
protected void onPause() { 
    Log.d(TAG, "ViewProblemSetActivity.onPause"); 
    super.onPause(); 
} 

Hier ist das Protokoll von Anfang an mit der ersten Aktivität zu erstellen, auf die zweite Aktivität geht, dann auf die zweite Aktivität zurück.

03-30 13:23:50.021 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onCreate savedInstanceState=null 
03-30 13:23:50.026 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onResume 
03-30 13:23:54.324 2540-2540/io.gradem.gradem D/view_ps_activity: clicked on problem 
03-30 13:23:54.337 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onPause 
03-30 13:23:54.354 2540-2540/io.gradem.gradem D/activity_feedback: ProblemFeedbackActivity.onCreate savedInstanceState=null 
..... some over behavior before returning to previous activity .... 
03-30 13:30:12.377 7266-7266/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onSaveInstanceState savedInstanceState=Bundle[{}] 
03-30 13:23:58.861 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onCreate savedInstanceState=null 

Antwort

1

savedInstanceState sollte das Problem eigentlich lösen, aber eine Singleton-Klasse scheint einfacher.

+0

Ich ging voran und implementierte es und immer noch seltsames Verhalten zu sehen. Siehe meine Bearbeitung. – leerobert

+0

Verwenden Sie eine Singleton-Klasse, es ist einfacher. – ozo

+0

Ich habe gerade nachgeschaut ... https: //gist.github.com/Akayh/5566992 ... es ist brillant. Danke für den Kommentar. Die Tatsache, dass die Extras nicht beibehalten werden, ist eine Art Designfehler. Danke für die Hilfe. – leerobert

Verwandte Themen