super.onBackPressed Möglichkeit bei einem Fragment WebView

  • Guten Abend Leute,


    aktuell mach ich für einen Freund, der einen Webshop besitzt eine App.
    Da ich noch am Anfang bin möchte ich vieles versuchen und gehe hin und wieder vlt den einfachen Dingen (oft nicht bewusst) aus dem Weg.


    Mein Problem:
    ich habe ein Fragment erstellt mit der Funktion eine Webseite in der App zu öffnen.
    Wenn ich in dem Fragment mit dem WebView drin bin und dann am Handy auf die Backtaste drücke, schließt sich die App.


    Diesen Code möchte ich gerne einfügen:
    public void onBackPressed() {
    if (webView.canGoBack()){
    webView.goBack();
    } else {
    super.onBackPressed();
    }
    }Aber .onBackPressend(); ist rot (scheinbar nicht möglich im Fragment)Nachfolgenden der ganze Code:import android.os.Bundle;import android.support.annotation.NonNull;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.webkit.WebSettings;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;


    public class Instagram extends Fragment {


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    }


    public WebView mWebView;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_layout_webviewinstagram, container, false);
    mWebView = (WebView)v.findViewById(R.id.webviewinstagram);
    mWebView.loadUrl("https://www.instagram.com/why.design63/");


    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);


    mWebView.setWebViewClient(new WebViewClient());


    return v;
    }


    public void onBackPressed() {
    if (webView.canGoBack()){
    webView.goBack();
    } else {
    super.onBackPressed();
    }
    }
    }

  • Vielen Dank für die Antwort.
    Ich habe mir das angeschaut und verstehe das nicht ganze wie es in stackoverflow steht.
    Bei Build meckert der allein schon weil ich hier im Fragment bei myConditon meine Variabele mWebView eingesetzt habe.
    @Overridepublic boolean onBackPressed() {if (myCondition) {//action not popBackStackreturn true;} else {return false;}} }

  • Es Ist so das das Fragment nicht alleine laufen kann. Ein Fragment läuft innerhalb einer Activity .


    Sozusagen laufen beide Klassen .


    Alle Klick Events kommen aber in der Activity an und nicht im Fragment. Auch das Event vom Back Button kommt in der Activity an . Deshalb gibt es die onBackPressed() Methode nicht in einem Fragment. Kann somit auchnicht überschrieben werden .


    In der Acktivity geht das natürlich wenn du das Event in dem Fragment brachst musst du es an das Fragment weiterreichen. ZB mit einem Interface und einer Callback Methode im Fragment.



    Das sich die app nicht mit der Back tasteschlierst kannst du mit dem Back Stack lösen.

  • Noch etwas zum Thema da du kein override für die Methode und diese auch nicht in der abgeleiteten fragment Klasse ist.
    Erstelle der Compiler eine neu Methode. Natürliche gibt es in der super klasse diese Methode nicht und deshalb kannst du sie auch nicht aufrufen.
    Weist du überhaupt was die super klasse ist?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!