How to implement android Toolbar Back button

后端 未结 6 976
野性不改
野性不改 2021-01-03 23:37

I am using a custom toolbar. I need to add back button to it. Now I am using this code to add the back button.

Toolbar toolbar = (Toolbar) getActivity().find         


        
相关标签:
6条回答
  • 2021-01-04 00:19

    You can handle back icon very easily. If all of your fragment are in single Activity I really recommend to handle this with following way :

    first crate a abstract BaseFragment class which implement FragmentManager .OnBackStackChangedListener then put following method inside that :

      @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            mainActivity = (MainActivity) getActivity();
    
            getFragmentManager().addOnBackStackChangedListener(this);
    
            shouldDisplayHomeUp();
        }
    
        @Override
        public void onBackStackChanged() {
            shouldDisplayHomeUp();
        }
    
    
        public boolean shouldDisplayHomeUp() {
            //Enable Up button only  if there are entries in the back stack
            boolean canBack = false;
            try {
                canBack = getFragmentManager().getBackStackEntryCount() > 0;
            } catch (Exception ex) {
    //            Log.e(getClass().getCanonicalName(), ex.getMessage());getMessage
            }
    
            if (canBack) {
                mainActivity.drawerDisable();
            } else {
                mainActivity.drawerEnable();
            }
            return canBack;
        }
    

    By this way disableDrawer & enableDrawer function handle your Icon and OnBackPressed method handle your BackStack Now in your activity when you press back-icon display if needed. your onBackPressed should be something like this :

     int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
    
                if (backStackCount == 0) {
                    //nothing exist in backStack OS handle it
                    super.onBackPressed();
                } else {
    
                    getSupportFragmentManager().popBackStack();
    }
    

    See full implementation here.

    0 讨论(0)
  • 2021-01-04 00:19

    use Method in Class your Activity

    private void setupToolbar(){
      Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
           setSupportActionBar(toolbar);
           ActionBar actionBar=getSupportActionBar();
           actionBar.setDisplayHomeAsUpEnabled(true);
           actionBar.setDisplayShowHomeEnabled(true);
           toolbar.setNavigationOnClickListener(new View.OnClickListener() {
       @Override
              public void onClick(View v) {  
               finish();  
                 }
                   });
                  }
    
    0 讨论(0)
  • 2021-01-04 00:22

    It's works on back pressed function to toolbar

    private setUpToolBar() {
    
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    
    setSupportActionBar(toolbar);
    
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    
    @Override
    
    public void onClick(View v) {
    
    onBackPressed();
    
    }
    
    });
    
    }
    
    0 讨论(0)
  • 2021-01-04 00:23

    This assumes you are using an AppCompatActivity

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);        
            setContentView(R.layout.activity_main);
    
            toolbar = (Toolbar) findViewById(R.id.tool_bar); // Attaching the layout to the toolbar object
            setSupportActionBar(toolbar);
    
            // enabling action bar app icon and behaving it as toggle button
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setHomeButtonEnabled(true);
       }
    

    Then in the onOptionsItemSelected you can override the home button as follows:

     @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
            else if(id == android.R.id.home){
                Intent i= new Intent(this, MainActivity.class);
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(i);
                finish();
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    
    0 讨论(0)
  • 2021-01-04 00:26

    i have Main activity and Four fragments. In MainActivity i write this code

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
    
            }
        });
    

    this is working fine and if you have fragments then create a onBackPressed() method

    @Override
    public void onBackPressed() {
        int position = mViewPager.getCurrentItem();
        if(position == 2) { // go back to search / result tab from info detail tab
            mViewPager.setCurrentItem(2);
        } else if(position == 0) { // switch from result to search tab or go back to home tab
            SectionsPagerAdapter sectionsPagerAdapter = (SectionsPagerAdapter) mViewPager.getAdapter();
            Fragment fragment = sectionsPagerAdapter.getItem(position);
            if(fragment instanceof ResultFragment) {
                Bundle bundle = ((ResultFragment) fragment).getArguments();
                if(bundle != null) {
                    sectionsPagerAdapter.replaceFragment(SearchFragment.newInstance(bundle.getString(GlobalInfo.TAG_ID), bundle.getString(GlobalInfo.PART_NO), bundle.getString(GlobalInfo.SERIAL_NO), bundle.getString(GlobalInfo.PART_NAME)), getString(R.string.search), 0);
                }
            } else {
                mViewPager.setCurrentItem(1);
            }
        }
        else if(position == 3){
            SectionsPagerAdapter sectionsPagerAdapter = (SectionsPagerAdapter) mViewPager.getAdapter();
            Fragment fragment = new ToolMgtFragment();
            sectionsPagerAdapter.replaceFragment(fragment,"Tool Mgt", 3);
        }
        else {
            super.onBackPressed();
        }
    }
    
    0 讨论(0)
  • 2021-01-04 00:28

    Just add two new line of code. Something like this

    Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
    toolbar.setBackgroundColor(getResources().getColor(R.color.white));
    toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow));
    
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });
    
    0 讨论(0)
提交回复
热议问题