onResume() funktioniert nicht richtig

G

Gingerbread

Fortgeschrittenes Mitglied
6
Habe in meinen Code die onResume() Methode eingebaut, damit die Activity neu geladen wird, wenn der Back-Button benutzt wird.
Hier eine grobe Struktur des Codes:
Code:
public class MeineActivity extends ListActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);
        // Weiterer Code
        }

 public void onResume(){
    	super.onResume();
    	setContentView(R.layout.activity);
        // Weiterer Code
         }

}

Nun habe ich das Problem, dass der onResume()-Block jedesmal ausgeführt wird, wenn die Activity gestartet wird.
Wenn diejenige Activity nun mittels Back-Button aufgerufen wird, dann wird der Resume-Block nicht ausgeführt.

P.S.: Das Ganze befindet sich in einer ActivityGroup und in einem TabHost.
 
Du Brauchst keinen View in onResume zu konfigurieren - das machst du im onCreate()

onPause() ist dafür gedacht, Daten zu speichern, Threads zu szoppen und sich auf WInterschlaff vorzubereiten - das ganze mach man im onResume() rückgängig
 
Ok, wäre es denn theoretisch richtig onResume() zu verwenden, wenn ich einzelne Elemente der Activity (wie zB. erneuern der ListView) ausführen möchte?
 
Ja, so in etwa. onResume() wird immer aufgerufen, wenn die Activity in der Vordergrunf gebracht wird

onCreate - bau deinen Interface auf
onResume - initialisiere von gespeicherten Daten und starte was du starten muss
onPause - speichere den Zustand und stoppe deine Prozesse
 
Ok,
und wie kommt es dann, dass die onResume() Funktion nie ausgeführt wird, wenn ich eine Activity wieder per Backbutton aufrufe?
 
Also muss ich das ganze in etwa so einbauen:

Code:
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
  //Mein Code
}

@Override
public void onResume()
{
    super.onResume();
    //Mein Code
}

 @Override
    public void onPause()
    {
    	super.onPause();
    }
 
Also theoretisch müsste das ja so funktionieren, probier es doch mal an einem anderen Projekt ohne TabHost aus.
 
Habe nun endlich rausgefunden woran es liegt:
Die neue Activity wird aufgerufen mitttels:
Code:
 View view = ActivityGroup.group.getLocalActivityManager()  
        .startActivity("activity_neu", i  
        .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))  
        .getDecorView();  
        
        // Again, replace the view  
        Activity.group.replaceView(view);

Das steht in der ActivityGroup:
Code:
public void replaceView(View v) {  
        // Adds the old one to history  
       history.add(v);  
        // Changes this Groups View to the new View.  
       setContentView(v);  
      }  
	
	public void back() { 
		try{
        if(history.size() > 0) {  
            history.remove(history.size()-1);  
            setContentView(history.get(history.size()-1));  
        }else {  
            finish();  
        }  
		}
		catch(Exception e){}
    }
	
    public void onBackPressed() {  
        ActivityGroup.group.back();  
        return;  
    }

Und nun wird mit folgendem Code der Zurückbefehl ausgeführt:
Code:
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
    if(keyCode == KeyEvent.KEYCODE_BACK)
    {
    ActivityGroup.group.back();
    return true;
    }
    return super.onKeyDown(keyCode, event);
    }

Das Problem besteht jetzt halt darin, dass die alte Activity nur mittels
setContentView(history.get(history.size()-1));
ersetzt wird.
Deswegen wird wahrscheinlich auch nie die onResume Funktion ausgeführt. Wie kann ich jetzt dieses Problem beheben?
 

Ähnliche Themen

SaniMatthias
Antworten
19
Aufrufe
960
swa00
swa00
S
Antworten
7
Aufrufe
1.162
swa00
swa00
O
Antworten
15
Aufrufe
2.973
ORHUX
O
Zurück
Oben Unten