底部导航菜单onClick图标选择

时间:2019-01-17 02:17:38

标签: java android android-studio android-bottom-nav-view

我认为两个相关的问题。 背景:我有三个底部导航项,它们会导致其他布局和活动。其中之一是家。

  1. 从主页执行onClick时,将打开选定的活动和布局,但是选定的图标仅在单击时突出显示,然后突出显示主页。如果再次按下,它将突出显示所选的布局图标。如何使首次点击时突出显示图标?

  2. 主页上还有其他三个按钮可以引导您进行其他活动。选择“主页”后,要花费很长时间才能返回“主页”。为什么呢?其他活动/布局目前为空。我需要在后台运行服务吗? Home Java / Activity代码并没有那么长,但是要花很长时间才能返回。

真的很感谢您的一些想法。也许答案是零散的,不确定是否可以解决第一个问题? 我已经包括了用于从首页进行底部导航的代码。 问候, 爱德华

P.S。我一个月前才开始使用Java和Android Studio。

    //Declare navigation view ID (bottomnav_view) in content_main
    BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomnav_view);
    bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()){
                case R.id.ic_home: break;
                case R.id.ic_instruments:
                    Intent intentinstruments = new Intent(MainActivity.this, InstrumentListActivity.class);
                    startActivity(intentinstruments);
                    break;
                case R.id.ic_methods:
                    Intent intentmethods = new Intent(MainActivity.this, MethodsActivity.class);
                    startActivity(intentmethods);
                    break;
            }
            return true;
        }
    });
    //End of bottom hav handler

3 个答案:

答案 0 :(得分:1)

  

在实现时始终首选片段   BottomNavigationView。

尝试这种方式。

bottomNavigationView.setOnNavigationItemSelectedListener(new  
    BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment selectedFragment = null;

        switch (item.getItemId()){
            case R.id.navigation_News:
                selectedFragment = ItemoneFragment.newInstance();
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.content,selectedFragment);
                transaction.addToBackStack(null);
                transaction.commit();
                return true;

            case R.id.navigation_profile:
                selectedFragment = ItemtwoFragment.newInstance();
                transaction = getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.content,selectedFragment);
                transaction.addToBackStack(null);
                transaction.commit();
                return true;

        }
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.content, selectedFragment);
        transaction.commit();
        return true;
    }
});

答案 1 :(得分:0)

注意:如果您将底部导航视图与包含导航图,导航主机和导航控制器的导航组件一起使用,则BottomNavigationView.OnNavigationItemSelectedListener内部的片段事务将不起作用。 您需要使用 navigationController.navigate 如下所示:-

        navController = Navigation.findNavController(view); 
        bottomNavigationView =findViewById(R.id.nav_view);
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.navigation_home:
                        navController.navigate(R.id.navigation_home);
                        break;
                    case R.id.navigation_received_files_list:
                        navController.navigate(R.id.navigation_received_files_list);
                        break;
                }
                return true;
            } 

答案 2 :(得分:0)

简而言之,使用BottomNavigationView.setOnNavigationItemSelectedListener

BUTNavigationUI.setupWithNavController 在内部调用 setOnNavigationItemSelectedListener,因此任何先前的 OnNavigationItemSelectedListener 都将被丢弃

如果您想注入一些超出系统行为的代码,请使用以下方法

// Apply default system behavior, so you don't have to handle fragment transaction manually
navView.setupWithNavController(navController) 

navView.setOnNavigationItemSelectedListener {
    if (NavigationUI.onNavDestinationSelected(it, navController)) {
        true
    } else {
        when (it.itemId) {
            R.id.test -> true
            else -> false
        }
    }
}