Skip to content Skip to sidebar Skip to footer

Make The Onbackpressed In Fragment

How to change code below of activity to the code in Fragment? This is Android Studio code. My page now is Fragment, I want use this code and i want modified to fragment code. If wh

Solution 1:

This is your onCreateView method as per your need

@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    Viewview= inflater.inflate(R.layout.tab1_fragment, container, false);

    webView = (WebView) view.findViewById(R.id.webview);

    WebSettingswebSettings= webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webView.setInitialScale(1);
    
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(false);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.loadUrl("https://www.facebook.com/");
    webView.setWebViewClient(newWebViewClient());

    view.setFocusableInTouchMode(true);
    view.requestFocus();
    view.setOnKeyListener(newView.OnKeyListener() {
        @OverridepublicbooleanonKey(View view, int code, KeyEvent keyEvent) {

            if (code == KeyEvent.KEYCODE_BACK && keyEvent.getAction() == KeyEvent.ACTION_UP) {

                //Here is logic to handle back press eventreturntrue;

            }


            returnfalse;
        }
    });

    return view;
}

Update to load previous page inside webview

Your onCreateView is same as you put in question. I made some simple change in Fragment.

Tab1 fragment will be like

publicclassTab1FragmentextendsFragment {

Context mContext;

public WebView webView;

@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    Viewview= inflater.inflate(R.layout.tab1_fragment, container, false);

    mContext = view.getContext();

    webView = (WebView) view.findViewById(R.id.webview);

    WebSettingswebSettings= webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webView.setInitialScale(1);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setUseWideViewPort(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    webView.setScrollbarFadingEnabled(false);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.loadUrl("https://www.facebook.com/");
    webView.setWebViewClient(newWebViewClient());

    return view;
}


}

Now your Activity will be

publicclassSampleActivityextendsAppCompatActivity {

Tab1Fragment mTab1Fragment;

@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sample);


    initialiseView();

}

privatevoidinitialiseView() {

    mTab1Fragment = newTab1Fragment();

    FragmentManagermFragmentManager= getSupportFragmentManager();

    FragmentTransactionmFragmentTransaction= mFragmentManager.beginTransaction();

    mFragmentTransaction.replace(R.id.container, mTab1Fragment, "TAB 1 FRAGMENT");

    mFragmentTransaction.commit();

}

@OverridepublicvoidonBackPressed() {

    //Toast.makeText(this, "Calling back pressed", Toast.LENGTH_SHORT).show();if (mTab1Fragment != null) {

        if (mTab1Fragment.webView.canGoBack()) {

            mTab1Fragment.webView.goBack();

        }

    } else {

        super.onBackPressed();
        
    }
}
}

NOTE: Here I kept webview public just for simplicity. Keep it private and use getter to access it. If you want to use more fragments then add TAG for each fragment and identify which fragment is visible.

Solution 2:

The official solution from android

overridefunonAttach(context: Context) {
    super.onAttach(context)
    val callback: OnBackPressedCallback = object : OnBackPressedCallback(
        true
    ) {
        overridefunhandleOnBackPressed() {
            // Leave empty do disable back press.
        }
    }
    requireActivity().onBackPressedDispatcher.addCallback(
        this,
        callback
    )
}

Alternate Solution 1

override fun onResume() {
    super.onResume()
    requireView().isFocusableInTouchMode = truerequireView().requestFocus()
    requireView().setOnKeyListener { v, keyCode, event ->
        if (event.action === KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
            // Add your code heretrue
        } elsefalse
    }
}

Post a Comment for "Make The Onbackpressed In Fragment"