Search code examples
androidandroid-fragmentactivityandroid-toolbar

how to set toolbar on FragmentActivity?


I want to set toolbar on my activity which extends FragmentActivity. I know that for use setSuppoertActionBar(toolbar) method we extends AppCompatActivity instead of FragmentActivity but I override the onMenuItemSelected(int featureId, MenuItem item) method which is final in AppCompatActivity and final method cannot override. so I'm restricted to extends FragmentActivity.

Here is my code:

public class MainActivity extends FragmentActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);   -> error is here
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
       // Inflate the menu
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
    }

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch(item.getItemId()){
            case R.id.action_search:
                onSearchRequested();
                break;
        }
        return super.onMenuItemSelected(featureId, item);
    }

I saw many answers related to that question but everyone says extends AppCompatActivity instead of FragmentActivity but I want to set toolbar as well as override onMenuItemSelected(int featureId, MenuItem item) method.

what should I do, please help.


Solution

  • This thing is good when you are using NavigationDrawer use this:-

     toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayShowTitleEnabled(false);
    

    then set Toolbar Title according to different fragment with different Titles in onNavigationItemSelected :-

    @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            // Handle navigation view item clicks here.
    
            sfm = getSupportFragmentManager();
            Fragment fragment = new Fragment();
            int id = item.getItemId();
    
            if (id == R.id.nav_id) {
                fragment = new YourFragment();
                toolbar.setTitle("SET TOOLBAR NAME");
            }else if (id == R.id.nav_id2) {
                fragment = new YourFragment();
                toolbar.setTitle("SET TOOLBAR NAME");
            } 
    

    For single fragment, first customize your style.xml like this :-

    <style name="YourStyleName" parent="Theme.AppCompat.Light.DarkActionBar">
    // ToDo as you want to do or as per your requirement
    
    </style>
    

    then apply into your custom toolbar:-

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/YourStyleName" >
    
      // ...........
    
    
    </android.support.v7.widget.Toolbar>