1. ホーム
  2. アンドロイド

[解決済み】ナビゲーションドロワー。起動時に選択された項目を設定するには?

2022-04-02 22:27:38

質問

私のコードは完全に動作します。ナビゲーションドロワー内のアイテムがクリックされるたびに、そのアイテムが選択されます。

もちろん、デフォルトのフラグメント(home)でアプリを起動したいのですが、Navigation Drawerではアイテムが選択されていません。プログラムでその項目を選択するにはどうしたらよいでしょうか?

public class BaseApp extends AppCompatActivity {

    //Defining Variables
    protected String LOGTAG = "LOGDEBUG";
    protected Toolbar toolbar;
    protected NavigationView navigationView;
    protected DrawerLayout drawerLayout;

    private DateManager db = null;

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

        navigationView = (NavigationView) findViewById(R.id.navigation_view);


        // set the home/dashboard at startup

        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame, new DashboardFragment());
        fragmentTransaction.commit();

        setNavDrawer();
    }

    private void setNavDrawer(){

        // Initializing Toolbar and setting it as the actionbar
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //Initializing NavigationView

        //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

            // This method will trigger on item Click of navigation menu
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {


                //Checking if the item is in checked state or not, if not make it in checked state

                // I THINK THAT I NEED EDIT HERE...

                if (menuItem.isChecked()) menuItem.setChecked(false);
                else menuItem.setChecked(true);

                //Closing drawer on item click
                drawerLayout.closeDrawers();


                //Check to see which item was being clicked and perform appropriate action
                switch (menuItem.getItemId()) {    

                    //Replacing the main content with ContentFragment 

                    case R.id.home:

                        DashboardFragment dashboardFragment = new DashboardFragment();
                        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                        fragmentTransaction.replace(R.id.frame, dashboardFragment,"DASHBOARD_FRAGMENT");
                        fragmentTransaction.commit();
                        return true;
[...]

ここを編集する必要があると思います。

if (menuItem.isChecked()) menuItem.setChecked(false);
                    else menuItem.setChecked(true);

または onCreate App起動時にFragmentTransactionを使用します。

ご協力ありがとうございました。

解決方法は?

以下のコードを使用してください。

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

を呼び出した後に、このメソッドを呼び出します。 setNavDrawer();

getItem(int index) メソッドは MenuItem を呼び出すと setChecked(true); その上で MenuItem であれば、あとはデフォルトで持っている要素のインデックスを調べて、0をそのインデックスに置き換えるだけです。

を呼び出すことで、その項目を選択(ハイライト)することができます。

onNavigationItemSelected(navigationView.getMenu().getItem(0));

以下は参考リンクです。 http://thegeekyland.blogspot.com/2015/11/navigation-drawer-how-set-selected-item.html

EDIT サポートライブラリリビジョン24.0.0、Nexus 4では動作しませんでした。

navigationView.setCheckedItem(R.id.nav_item);

以下は@kingstonさんの回答です。