Android Navigation Drawer: Programmatically Setting Selected Item at Startup

Nov 23, 2025 · Programming · 10 views · 7.8

Keywords: Android Navigation Drawer | NavigationView | Programmatic Selection Setting

Abstract: This article provides an in-depth exploration of how to programmatically set the default selected item in Android navigation drawers. Based on real-world development scenarios, it analyzes the issue where NavigationView fails to display the correct selected state during app startup and offers two effective solutions: using MenuItem's setChecked method and NavigationView's setCheckedItem method. The article includes comprehensive code examples and implementation steps to help developers understand the core mechanisms of navigation drawer selection state management.

Problem Background and Core Challenges

In Android application development, navigation drawers are common UI components that provide the main navigation functionality for applications. Developers often encounter a specific issue: while clicking navigation items correctly displays the selected state, the default navigation item (such as the home page) fails to automatically show as selected during app startup. This creates an inconsistent user experience, as users cannot intuitively understand their current navigation position.

Solution Analysis

To resolve the navigation drawer selection state issue at startup, the key lies in understanding NavigationView's selection state management mechanism. NavigationView inherits from ScrimInsetsFrameLayout and contains a Menu instance internally, where each MenuItem can have its selected state set via the setChecked method.

Method 1: Setting Selection State via MenuItem

The most direct approach involves obtaining a specific MenuItem and setting its selection state. The implementation code is as follows:

navigationView.getMenu().getItem(0).setChecked(true);

This code should be called in the Activity's onCreate method, after setting up the navigation drawer. Here, getItem(0) retrieves the first item in the menu, and developers need to adjust the index value based on the actual menu structure. This method is straightforward but requires attention to the menu item index order.

Method 2: Using the setCheckedItem Method

Starting from Support Library 23.0.0, NavigationView provides a more convenient setCheckedItem method:

navigationView.setCheckedItem(R.id.menu_nav_home);

This method specifies the menu item to select via resource ID, making it more stable and reliable, unaffected by changes in menu item order. It's important to note that for this method to work correctly, the menu items must be within a group that has the android:checkableBehavior="single" attribute.

Complete Implementation Example

Below is a complete BaseActivity implementation demonstrating how to correctly set the default selected item in the navigation drawer during app startup:

public class BaseApp extends AppCompatActivity {
    protected NavigationView navigationView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.base_layout);
        
        navigationView = (NavigationView) findViewById(R.id.navigation_view);
        
        // Set default Fragment
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame, new DashboardFragment());
        fragmentTransaction.commit();
        
        setNavDrawer();
        
        // Method 1: Set selected item via index
        navigationView.getMenu().getItem(0).setChecked(true);
        
        // Or Method 2: Set selected item via resource ID (recommended)
        // navigationView.setCheckedItem(R.id.home);
    }
    
    private void setNavDrawer() {
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                // Remove original selection state logic
                // if (menuItem.isChecked()) menuItem.setChecked(false);
                // else menuItem.setChecked(true);
                
                // Set current item as selected
                menuItem.setChecked(true);
                
                drawerLayout.closeDrawers();
                
                switch (menuItem.getItemId()) {
                    case R.id.home:
                        // Handle home navigation
                        break;
                    // Other navigation item handling
                }
                return true;
            }
        });
    }
}

Considerations and Best Practices

When implementing navigation drawer selection states, pay attention to the following points:

Compatibility Considerations

The setCheckedItem method requires Support Library 23.0.0 or later. If the project needs to support earlier versions, MenuItem's setChecked method can be used as an alternative. In practical development, it's recommended to check the Support Library version and choose the appropriate implementation method.

Conclusion

By properly utilizing NavigationView's selection state management methods, developers can easily achieve correct display of navigation drawers during app startup. The setCheckedItem method is recommended due to its better type safety and maintainability. Proper selection state management not only enhances user experience but also makes the application's navigation logic clearer and more consistent.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.