Search code examples
androidandroid-layoutnavigation-drawerandroid-listfragment

How do I set default startup fragment as home?


I'm having trouble with my Navigation Drawer, I want to set FragHome as my default startup Home. but i can't Implement it here's my code:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nav);    
        activity = this;      
        auth = FirebaseAuth.getInstance();
        dl = findViewById(R.id.nav_drawer);
        dl.setVerticalScrollBarEnabled(false);
        toggle = new ActionBarDrawerToggle(this, dl, R.string.nav_drawer_open, R.string.nav_drawer_close);    
        NavigationView nv = findViewById(R.id.nav);
        nv.setCheckedItem(R.id.nav_home);
        nv.setVerticalScrollBarEnabled(false);
        dl.addDrawerListener(toggle);
        toggle.syncState();

        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
        setContent(nv);
    }    
    public static void finishThis() {
        try {
            if (activity != null) {
                activity.finish();
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void showHome() {
        fragment = new FragHome();    
        if (fragment != null) {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.nav_home, fragment,fragment.getTag());
            ft.commit();       
        }
    }

    public void onDisplay(View v) {
        startActivity(new Intent(NavActivity.this, FragInfo.class));
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (toggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }    
    Fragment fragment = null;
    public void selectItem(MenuItem i) {


        switch (i.getItemId()) {
            case R.id.nav_home:
                fragment = new FragHome();
                break;
            case R.id.nav_eng:
                fragment = new FragEng();
                break;
            case R.id.nav_math:
                fragment = new FragMath();
                break;
            case R.id.nav_sci:
                fragment = new FragSci();
                break;
            case R.id.nav_his:
                fragment = new FragHistory();
                break;
            case R.id.exam:
                fragment = new examMain();
                break;
            case R.id.nav_about:
                fragment = new FragAbout();
                break;
            case R.id.nav_logout:

                AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.navDialog);
                builder.setMessage("Are you sure you want to log out?")
                        .setCancelable(false)
                        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                if (auth.getCurrentUser() != null)
                                    auth.signOut();
                                Intent intent = new Intent(NavActivity.this, LoginActivity.class);
                                startActivity(intent);
                                finish();
                            }
                        })
                        .setNegativeButton("No", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
                            }
                        });
                AlertDialog alert = builder.create();
                alert.show();
            default:
                fragment = new FragHome();
        }
        if (fragment != null) {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.nav_home, fragment);
            ft.commit();
        }
        DrawerLayout drawer = findViewById(R.id.nav_drawer);
        drawer.closeDrawer(GravityCompat.START);
    }
    private void setContent(NavigationView v) {
        v.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                selectItem(item);
                return true;
            }
        });
    }
    @Override
    public void onBackPressed() {
        //You may also add condition if (doubleBackToExitPressedOnce || fragmentManager.getBackStackEntryCount() != 0) // in case of Fragment-based add
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.nav_drawer);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            if(fragment instanceof FragHome){
                super.onBackPressed();
            }else {
                showHome();
            }
        }
    }
}

Solution

  • You never call showHome() inside your onCreate().See example below.

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nav);    
        activity = this;      
        auth = FirebaseAuth.getInstance();
        dl = findViewById(R.id.nav_drawer);
        dl.setVerticalScrollBarEnabled(false);
        toggle = new ActionBarDrawerToggle(this, dl, R.string.nav_drawer_open, R.string.nav_drawer_close);    
        NavigationView nv = findViewById(R.id.nav);
        nv.setCheckedItem(R.id.nav_home);
        nv.setVerticalScrollBarEnabled(false);
        dl.addDrawerListener(toggle);
        toggle.syncState();
    
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    
        setContent(nv);
        showHome();
    }