1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

onResume() funktioniert nicht richtig

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Gingerbread, 24.05.2011.

  1. Gingerbread, 24.05.2011 #1
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    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.
     
  2. ko5tik, 24.05.2011 #2
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    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
     
  3. Gingerbread, 24.05.2011 #3
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    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?
     
  4. ko5tik, 25.05.2011 #4
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    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
     
  5. Gingerbread, 27.05.2011 #5
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    Ok,
    und wie kommt es dann, dass die onResume() Funktion nie ausgeführt wird, wenn ich eine Activity wieder per Backbutton aufrufe?
     
  6. Gingerbread, 29.05.2011 #6
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    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();
        }
    
    
    
     
  7. Peter123, 29.05.2011 #7
    Peter123

    Peter123 Android-Hilfe.de Mitglied

    Beiträge:
    103
    Erhaltene Danke:
    7
    Registriert seit:
    13.11.2010
    Also theoretisch müsste das ja so funktionieren, probier es doch mal an einem anderen Projekt ohne TabHost aus.
     
  8. Gingerbread, 29.05.2011 #8
    Gingerbread

    Gingerbread Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    110
    Erhaltene Danke:
    6
    Registriert seit:
    21.01.2011
    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?
     

Diese Seite empfehlen