Search code examples
androidandroid-studioandroid-fragmentswebviewandroid-webview

I am using Web View inside a fragment. how to go back in web view


this is the web view fragment

public class Home extends Fragment {

public Home() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_home, container, false);
    WebView webView = (WebView)v.findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebViewClient(new WebViewClient()); 
    webView.loadUrl("https://www.google.com"); 
    return v;

}

}

I created web view inside other fragment not in main activity and when I press back button the app will close. so how to go back only inside web view (not through fragments)? please give me a solution.

here is my main activity

public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {

private static final String TAG = "MainActivity";

BottomNavigationView bottomNavigationView;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    bottomNavigationView = findViewById(R.id.bottom_navigation_view);

    bottomNavigationView.setOnNavigationItemSelectedListener(this);

    bottomNavigationView.setSelectedItemId(R.id.navigation_home);
}

Home homeFragment = new Home();
Live_And_Event_Schedule live_and_event_scheduleFragment = new Live_And_Event_Schedule();
Photos photosFragment = new Photos();
Videos videosFragment = new Videos();
About aboutFragment = new About();

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {

    switch (item.getItemId()){
        case R.id.navigation_home:
            getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.center, homeFragment).commit();
            return true;

        case R.id.navigation_live_and_event_schedule:
            getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.center, live_and_event_scheduleFragment).commit();
            return true;

        case R.id.navigation_photos:
            getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.center, photosFragment).commit();
            return true;

        case R.id.navigation_videos:
            getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.center, videosFragment).commit();
            return true;

        case R.id.navigation_about:
            getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.fade_in, R.anim.fade_out).replace(R.id.center, aboutFragment).commit();
            return true;
    }

    return false;
}

}


Solution

  • you can override onBackPressed in the Activity. save all fragmentTransaction before addToBackStack

    @Override
    public void onBackPressed() {
    
        int count = getSupportFragmentManager().getBackStackEntryCount();
    
        if (count == 0) {
            super.onBackPressed();
            //add extra code 
        } else {
            getSupportFragmentManager().popBackStack();
        }
    }