2012-06-18 13 views
9

Ich führe maswebview Klasse und ich möchte nur diese Aktivität beenden. Ich versuchte maswebview.this.finish(), aber wenn sie ausgeführt wurde, wurde App geschlossen. Wenn ich dann eine neue Ansicht für den Tab-Inhalt einstelle, wird diese korrekt geladen und Webviewmas verschwindet nur für eine Weile und erscheint dann wieder passend im Vollbildmodus. Wie beendet man maswebview vollständig? Danke an SieAndroid beenden aktuelle Aktivität verursacht App schließen

public void onClick(View arg0) 
      { 
       /* 
       Intent intent = getIntent(); 
       intent.addFlags(Intent.FLAG_ACTIVITY_TASK_ON_HOME); 
       startActivityForResult(intent, 1); 
       Intent intentmas = new Intent (maswebview.this, mas.class); 
       intentmas.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
       intentmas.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       intentmas.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       intentmas.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
       View vista = getLocalActivityManager().startActivity("maswb", intentmas).getDecorView(); 
       setContentView(vista); */ 

       maswebview.this.finish(); 
+3

fügen Sie die vollständige Stack-Trace von Ihrer Ausnahme – Houcine

+2

Sie müssen hier relevanter Code hinzufügen, das ist nicht genug, etwas zu sagen. – Sajmon

+0

ja, tut mir leid, bitte lesen Sie die Änderungen. Es gibt keine Ausnahme auf Logcat, App ist nur geschlossen, ohne Fehler – Jaume

Antwort

5

Haben Sie andere Aktivitäten Ihrer Anwendung in dem Stapel durch die Zeit, die Sie Finish() aufrufen? Wenn Sie dies nicht tun, sollten Sie die gewünschte Aktivität starten, anstatt die aktuelle zu beenden.

Aber eigentlich scheint es mir, dass Sie versuchen, etwas zu erreichen, das einfacher gemacht werden kann. Kannst du mehr Informationen über die aktuelle Aufgabe und deine App-Struktur bereitstellen, mit der du es versuchen willst?

Von dem, was Sie gesagt haben, scheint es, als ob Sie UI mit Registerkarten haben und Sie versuchen, eine Webansicht in einer der Registerkarten anzuzeigen, und dann ausblenden.

Zunächst sehe ich nicht, warum Sie die Webansicht in einer separaten Aktivität möchten. Scheint mir, du könntest es einfach im Layout eines der Tabs haben und einfach setVisibility (GONE) aufrufen, um es zu verstecken.

Second - und das ist wichtig - sieht aus wie Sie die Laschen alte Weise zu implementieren sind versuchen - TabWidget, TabHost usw. Da Honeycomb freigegeben wurde, gibt es viel bequemer Weg, Tabbed UI zu implementieren - Action Bar Tabs and Fragments - dieser Ansatz ist viel bequemer und macht Ihre Webview-Probleme obsolet: Es gibt eine Sache namens WebViewFragment, die im Grunde ein WebView, aber intelligenter ist - es wird seinen eigenen Lebenszyklus mit minimalem Aufwand von Ihnen behandeln (dh Pause wenn entfernt, fortsetzen, wenn hinzugefügt). Es wird einige Anstrengungen erfordern, um Fragmente zu studieren, aber es lohnt sich. Sie können Fragments API für Pre-Honeycomb Android SDKs als statische Bibliothek erhalten - es heißt Android-Support-v4 und Sie können es im Android SDK Manager herunterladen.

+0

WebViewFragment war ein Ausgangspunkt, um es zu erreichen!Ich schätze deine Hilfe sehr. – Jaume

+0

Gern geschehen, froh, dass ich helfen konnte. –

2

Rufen Sie an "maswebview.this.finish();" bevor die neue Aktivität gestartet wird?

Auch wenn Sie diese neue Aktivität nur starten möchten, ohne die alte Aktivität zu haben, können Sie android: nohistory = "true" zu Ihrer manifest.xml hinzufügen. Dies bewirkt, dass die aktuelle Aktivität die einzige Aktivität in der Warteschlange ist. Siehe HERE

Sie müssen ein wenig mehr Informationen für uns bereitstellen, um besser zu verstehen, was genau vor sich geht.

Ich hoffe, das hilft.

+0

beide Methoden funktioniert nicht vollständig, aber gute Link als Ausgangspunkt ... +1 – Jaume

0

Versuchen folgenden Code

@Override 
     public void onBackPressed() { 
     if(childView != null && parentLayout.getChildCount()==2){ 
      childView.stopLoading(); 
      parentLayout.removeViewAt(parentLayout.getChildCount()-1); 
      if(webView.getVisibility() == View.GONE) 
       webView.setVisibility(View.VISIBLE); 
     }else{   
      super.onBackPressed(); 
     } 
0

Haben Sie eine Elternaktivität, die diese startet? Wenn ja, stellen Sie sicher, dass Sie nach dem Start von maswebview nicht finish() aufrufen, damit die übergeordnete Aktivität im Stapel verbleibt. Nach dem Beenden von maswebview wird onResume für Ihre übergeordnete Aktivität aufgerufen.

Verwandte Themen