Wo tut man was in on*-Methoden?

  • 3 Antworten
  • Letztes Antwortdatum
P

PHANTOMIASER

Neues Mitglied
0
Hallo an alle!

Ich habe eine Frage zu Best Practices. Für Fragments und Activities gibt es die on*() Methoden, wie bspw. onCreate, onCreateView, onViewCreated, onStart, onStop, onDestroy, etc.

Wie lautet die Regel, wann bzw. in welchen on* Methoden tut man bspw. am Besten
  • Listener hinzufügen und entfernen -> onStart? onDestroy?
  • View-Elemente wie Button, TextView initialisieren -> wohl onCreateView?
  • View-Elemente Werte zuweisen, wie bspw. setText("test") -> onViewCreated?

Gibt es hierfür vllt. eine gute Seite in der das geschrieben steht?

Gruß PHANTOMIASER
 
Du solltest dir einfach anschauen wann welche Methode aufgerufen wird.
Denke das erklaert dann schon einiges.

Gesendet von meinem Nexus 10 mit der Android-Hilfe.de App
 
Hmm, mit kurzen Googeln ist das leicht rauszufinden, vorrausgesetzt man suchst mit den richtigen Stichwörten. Wäre in diesem Fall activity lifecycle. Gehört zu den Grundlagen der Androidprogrammierung ;) Managing the Activity Lifecycle

Bzw. developer.android.com sollte man immer offen haben, bzw. kennnen.
 
Vielen Dank für die Antworten. Den Lifecycle kenne ich grundlegend schon, aber ich bin mir bei manchen Dingen einfach nicht 100%ig sicher.

Vielleicht als Beispiel, worin meine Unklarheiten bestehen. Bspw. habe ich in meinem Fragment einen Button und eine TextView als Klasseneigenschaft und eine Instanz einer anderen selbstgeschriebenen Klasse.

Aktuell tue ich in onCreate:
Code:
myItem = null;
if (getArguments() != null) {
	myItem = getArguments().getSerializable("item");
}
super.onCreate(savedInstanceState);

In onCreateView:
Code:
View myView = inflater.inflate(R.layout.fragment_myview, container, false);
if (savedInstanceState != null) {
	myItem = (Item) savedInstanceState.getSerializable("item");
}

myText = (TextView) myView.findViewById(R.id.mytextview);
myText.setText(myItem.getName());

myButton = (Button) myView.findViewById(R.id.mybutton);
myButton.setOnClickListener(this);

return myView;

Hier denke ich schon, das ist nicht korrekt. Das Setzen des Textes sollte wohl eher in onStart geschehen, oder? Ebenfalls das setOnClickListener des Buttons?

In onDestroyView habe ich:
Code:
myButton.setOnClickListener(null);
super.onDestroyView();

Das müsste aber dann wohl in onPause geschehen mit dem setOnClickListener(null)?!

Und das sollte okay sein in onSaveInstanceState:
Code:
super.onSaveInstanceState(outState);
outState.putSerializable("item", myItem);

Und muss ich meine Klasseneigenschaften zu einem bestimmten Zeitpunkt im Lifecycle wieder freigeben? Also das TextView, das wird ja bei jedem onCreateView neu erstellt, sollte das nicht dann bei onPause oder onDestroy freigegeben werden? Oder lasse ich das den GC machen?

Schon mal Danke für eure Geduld mit mir und die Hilfe!
 
Zurück
Oben Unten