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"