Cannot catch toolbar home button click event

前端 未结 11 2022
悲&欢浪女
悲&欢浪女 2020-11-27 02:56

I\'ve implemented the newest appcompat library and using the Toolbar as action bar. But the problem is I cannot catch the home button / hamburger icon click eve

11条回答
  •  面向向阳花
    2020-11-27 03:25

    I have handled back and Home button in Navigation Drawer like

    public class HomeActivity extends AppCompatActivity
            implements NavigationView.OnNavigationItemSelectedListener {
        private ActionBarDrawerToggle drawerToggle;
        private DrawerLayout drawerLayout;
        NavigationView navigationView;
        private Context context;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_home);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            resetActionBar();
    
            navigationView = (NavigationView) findViewById(R.id.navigation_view);
            navigationView.setNavigationItemSelectedListener(this);
    
            //showing first fragment on Start
            getSupportFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).replace(R.id.content_fragment, new FirstFragment()).commit();
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            //listener for home
            if(id==android.R.id.home)
            {  
                if (getSupportFragmentManager().getBackStackEntryCount() > 0)
                    onBackPressed();
                else
                    drawerLayout.openDrawer(navigationView);
                return  true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    
        @Override
        public void onBackPressed() {
           if (drawerLayout.isDrawerOpen(GravityCompat.START)) 
                drawerLayout.closeDrawer(GravityCompat.START);
           else 
                super.onBackPressed();
        }
    
        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            // Begin the transaction
    
            Fragment fragment = null;
            // Handle navigation view item clicks here.
            int id = item.getItemId();
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            if (id == R.id.nav_companies_list) {
                fragment = new FirstFragment();
                // Handle the action
            } 
    
    
            // Begin the transaction
            if(fragment!=null){
    
                if(item.isChecked()){
                    if(getSupportFragmentManager().getBackStackEntryCount()==0){
                        drawer.closeDrawers();
                }else{
                        removeAllFragments();
                        getSupportFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE).replace(R.id.WikiCompany, fragment).commit();
                        drawer.closeDrawer(GravityCompat.START);
                    }
    
                }else{
                    removeAllFragments();
                    getSupportFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE).replace(R.id.WikiCompany, fragment).commit();
                    drawer.closeDrawer(GravityCompat.START);
                }
            }
    
            return true;
        }
    
        public void removeAllFragments(){
            getSupportFragmentManager().popBackStackImmediate(null,
                    FragmentManager.POP_BACK_STACK_INCLUSIVE);
        }
    
        public void replaceFragment(final Fragment fragment) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .replace(R.id.WikiCompany, fragment).addToBackStack("")
                    .commit();
        }
    
    
        public void updateDrawerIcon() {
            final Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    try {
                        Log.i("", "BackStackCount: " + getSupportFragmentManager().getBackStackEntryCount());
                        if (getSupportFragmentManager().getBackStackEntryCount() > 0)
                            drawerToggle.setDrawerIndicatorEnabled(false);
                        else
                            drawerToggle.setDrawerIndicatorEnabled(true);
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }, 50);
        }
    
        public void resetActionBar()
        {
            //display home
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setHomeButtonEnabled(true);
        }
    
        public void setActionBarTitle(String title) {
            getSupportActionBar().setTitle(title);
        }
    }
    

    and In each onViewCreated I call

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ((HomeActivity)getActivity()).updateDrawerIcon();
        ((HomeActivity) getActivity()).setActionBarTitle("List");
    }
    

提交回复
热议问题