2016-11-26 1 views
0

Hier in der untenstehenden Aktivität zeige ich eine Webseite an. Wenn ich backbackbutton drücke, möchte ich MainActivity.class gehen, aber es zeigt leeren Bildschirm und danach, wenn ich den Backbutton wieder drücke, dann zeigt es mir die MainActivity.Jetzt aber habe ich es selbst gelöst. was ich getan habe, war ich fertig schreiben(); gleich nach wv.loadUrl (url). Es funktioniert jetzt gut. Kann mir bitte jemand erklären, warum es vorher nicht funktioniert hat.leerer Bildschirm beim Drücken der Rücktaste im Webview

public class LinkActivity extends AppCompatActivity { 
    WebView wv; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_link); 
     wv = (WebView)findViewById(R.id.webView); 
     Intent intent = getIntent(); 

     String url = intent.getStringExtra("url"); 
     wv.loadUrl(url); 
     wv.setOnKeyListener(new View.OnKeyListener() { 
      @Override 
      public boolean onKey(View view, int i, KeyEvent keyEvent) { 
       switch (i) 
       { 
        case KeyEvent.KEYCODE_BACK: 
         finish(); 
         Intent intent1 = new Intent(LinkActivity.this,MainActivity.class); 
         startActivity(intent1); 
         break; 

       } 
       return false; 
      } 
     }); 
    } 

} 

Antwort

0

Die finish() sollte nach startActivity kommen. Versuchen Sie folgendes:

Intent intent1 = new Intent(LinkActivity.this,MainActivity.class); 
startActivity(intent1); 
finish(); 
+0

ich denke, es ist egal, wo Sie fertigstellen. Aber ich habe versucht, dass es nicht funktioniert hat. –

+0

Ich schrieb Ende(); nach dem Aufruf von wv.loadUrl (url). Es funktioniert jetzt gut. Allerdings nicht sicher, wie es funktioniert .. lol –

0

Ich glaube, Sie diese Funktion, statt überschreiben sollte setOnKeyListener da onkeylistener ausgelöst zweimal nach unten & bis es

unerwünschtes Verhalten
@Override 
public void onBackPressed() { 
    finish(); 
    Intent intent1 = new Intent(LinkActivity.this, MainActivity.class); 
    startActivity(intent1);  
} 

tun könnte, oder Sie können Filter tun auf onkeylistener

wv.setOnKeyListener(new OnKeyListener() 
    {       
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      //This is the filter 
      if (event.getAction()!=KeyEvent.ACTION_DOWN) 
       return true; 

      switch (keyCode) { 
       case KeyEvent.KEYCODE_BACK: 
        finish(); 
        Intent intent1 = new Intent(LinkActivity.this, MainActivity.class); 
        startActivity(intent1); 
        break; 
      } 

      return true; 
     } 

    }); 
+0

Vielen Dank für Ihre Antwort, aber es funktioniert nicht. Nur damit Sie MainActivity als Listenansicht sehen können. –

+0

Ich schrieb Ende(); nach dem Aufruf von wv.loadUrl (url). Es funktioniert jetzt gut. Aber nicht sicher, wie es funktioniert .. lol –

+0

überprüfen Sie meine neue Antwort –

1

Ok, jetzt verstehe ich Ihr Problem

Blank Bildschirm ist nur Ihre LinkActivity ohne die Homepage zu laden, da Ihre LoadURL Funktionsaufruf Webbrowser

wv.loadUrl(url); 

, wenn Sie Ihre eigenen Client und überschreiben url nicht implementieren außerhalb Ihrer Aktivität Web-Browser ruft

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 
     return false; 
    } 
} 

diese Verwendung mit

wv.setWebViewClient(new MyWebViewClient()); 

so dass uRL-Anfrage Last in Ihrer Anwendung statt Browser

+0

Vielen Dank für die Erklärung. Ich bin ein Neuling. Nur noch eine Frage ... ist es notwendig, den WebViewClient zu benutzen? ... ist etwas falsch, wenn ich nach dem Laden der Webseite den Vorgang beende? –

+0

es ist nichts falsch es wird nur Ihre Aktivität zerstören, wenn Sie einige Logik in Webview WebViewClient implementieren möchten, ist notwendig –

+0

danke..ich weiß es zu schätzen. –

Verwandte Themen