title: Android toolbar crashing
body: <p>I am trying to change code written by com.divyeshbc which I pulled from GitHub. The original code sets up a Toolbar in main_activity and populates it with icons. I want to re-package this code as a separate class so that I can have the toolbar pop up as a dialog when I click a button. I have 2 immediate problems.</p>
  
  <p>1:  The type "android.support.v7.widget.Toolbar" is not being recognized as the same as "Toolbar". I'm having to cast all variables specifically for findViewById() to work. The crash happens in SlidingTab.initialize(), in "findViewById(R.id.toolbar)". The find fails and the program crashes.</p>
  
  <p>2: (Toolbar) FindViewById(R.id.toolbar) works fine in main_activity but not in a method called from the main activity. I have tried forcing setContentView() to a view that I know holds the id but it isn't helping. When the find fails the program crashes.</p>
  
  <p>I am using the latest Android IDE (1.5 I think) and the latest SDK. I'm stuck - I would appreciate any advice and suggestions.</p>
  
  <p><strong>Here's my MainActivity</strong></p>
  
  <pre><code>package com.divyeshbc.slidingscrollbar;
  
  import android.graphics.drawable.Drawable;
  import android.os.Bundle;
  import android.support.annotation.Nullable;
  import android.support.v4.app.Fragment;
  import android.support.v4.app.FragmentManager;
  import android.support.v4.app.FragmentPagerAdapter;
  import android.support.v4.view.ViewPager;
  import android.text.SpannableString;
  import android.text.Spanned;
  import android.text.style.ImageSpan;
  import android.view.LayoutInflater;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.TextView;
  import android.support.v7.widget.Toolbar;
  
  import com.divyeshbc.slidingscrollbar.tabs.SlidingTabLayout;
  import com.divyeshbc.slidingscrollbar.SlidingTab;
  
  
  public class
      MainActivity extends BaseActivity {
  
  public ViewPager mPager;
  public SlidingTabLayout mTabs;
  public SlidingTab mSlidingTab;
  public android.support.v7.widget.Toolbar mToolbar;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
  
      setContentView(R.layout.sliding_tab);
      if (mToolbar != null) {
          //Use current toolbar
          setSupportActionBar(mToolbar);
      } else {
          mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
      }
  
  
      mSlidingTab = new SlidingTab();
      mSlidingTab.initialize();
  
      mTabs = mSlidingTab.getSlidingTabLayout();
      mPager = mSlidingTab.getViewPager();
  
      //setContentView(R.layout.sliding_tab);
  
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
  }
  
  @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;
      }
  
      return super.onOptionsItemSelected(item);
  }
  
  class MyPagerAdapter extends FragmentPagerAdapter {
  
      //Setting up integer array of icons
      int icons[] = {R.drawable.about_us, R.drawable.campus, R.drawable.events, R.drawable.learning, R.drawable.sewa};
  
      //Defined from strings.xml
      String[] tabText = getResources().getStringArray(R.array.tabs);
  
      public MyPagerAdapter(FragmentManager fm) {
          super(fm);
          //Initialising the strings array of tabs
          tabText = getResources().getStringArray(R.array.tabs);
      }
  
      @Override
      public Fragment getItem(int position) {
  
          //Initialising Fragment
          //Passing in the position so that position of the fragment is returned
          MyFragment myFragment = MyFragment.getInstance(position);
  
          return myFragment;
      }
  
      @Override
      public CharSequence getPageTitle(int position) {
  
          //Constructing drawable object from the icon position
          Drawable drawable = getResources().getDrawable(icons[position]);
  
          //Defining the bounds for each icon as this is not automatically calculated
          drawable.setBounds(0, 0, 90, 90);
  
          //Passing icons as drawable objects into the imageSpan. This means it can be placed amongst the text
          ImageSpan imageSpan = new ImageSpan(drawable);
  
          //Spannable strings allows us to embed images with text (attach/detach images)
          SpannableString spannableString = new SpannableString(" ");
  
          //Here setting the span of the icons amongst the scroll bar. Using the array of icons, starting at position 0,
          //till the end, SPAN_EXCLUSIVE_EXCLUSIVE will ensure only the images in the range are included, nothing more,
          //nothing less
          spannableString.setSpan(imageSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
          //Return the spannable string with icons embedded
          return spannableString;
      }
  
      @Override
      public int getCount() {
          return 5;
      }
  }
  
  public static class MyFragment extends Fragment {
  
      private TextView textView;
  
      //Method to return instance of the fragment. Passing in position to show which position is currently being shown in the fragment
      public static MyFragment getInstance(int position) {
          //Construct the fragment
          MyFragment myFragment = new MyFragment();
  
          //New bundle instance
          Bundle args = new Bundle();
  
          //Passing in the Integer position of the fragment into the argument
          args.putInt("position", position);
  
          //Setting the argument of the fragment to be the position
          myFragment.setArguments(args);
  
          //Return the fragment
          return myFragment;
      }
  
      @Override
      //This will handle how the fragment will display content
      public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle saveInstanceState) {
          //Inflate the fragment_main layout
          View layout = inflater.inflate(R.layout.fragment_main, container, false);
  
          //Initialising the text view
          textView = (TextView) layout.findViewById(R.id.position);
  
          //Getting a reference to the TextView (as defined in fragment_main) and set it to a value
          Bundle bundle = getArguments();
  
          //Safety Check
          if (bundle != null) {
              textView.setText("The page currently selected is " + bundle.getInt("position"));
          }
  
          return layout;
      }
  }
  }
  </code></pre>
  
  <p><strong>and here's my primary sliding tab class:</strong></p>
  
  <pre><code>package com.divyeshbc.slidingscrollbar;
  
  import android.graphics.drawable.Drawable;
  import android.os.Bundle;
  import android.support.annotation.Nullable;
  import android.support.v4.app.Fragment;
  import android.support.v4.app.FragmentManager;
  import android.support.v4.app.FragmentPagerAdapter;
  import android.support.v4.view.ViewPager;
  import android.support.v7.app.AppCompatActivity;
  import android.support.v7.widget.Toolbar;
  import android.text.SpannableString;
  import android.text.Spanned;
  import android.text.style.ImageSpan;
  import android.view.LayoutInflater;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.TextView;
  import android.support.v7.widget.Toolbar;
  
  import com.divyeshbc.slidingscrollbar.tabs.SlidingTabLayout;
  
  public class
      SlidingTab extends AppCompatActivity {
  
  public ViewPager mPager;
  public SlidingTabLayout mTabs;
  public android.support.v7.widget.Toolbar mToolbar;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
  
      //Calling Activate Toolbar method
      //mToolbar = activateToolBar();
  
      if (mToolbar != null) {
          //Use current toolbar
          setSupportActionBar(mToolbar);
      } else {
          mToolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
      }
  
  
      mPager = (ViewPager) findViewById(R.id.pager);
      //Setting the Adapter on the view pager first. Passing the fragment manager through as an argument
      mPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
      mTabs = (SlidingTabLayout) findViewById(R.id.tabs);
  
      //Setting the custom Tab View as the Sliding Tabs Layout
      mTabs.setCustomTabView(R.layout.custom_tab_view, R.id.tabText);
  
      mTabs.setDistributeEvenly(true);
           //mTabs.setSelectedIndicatorColors(getResources().
                       //getColor(R.color.tabIndicatorColour));
  
      mTabs.setBackgroundColor(getResources().getColor(R.color.basePrimaryBackgroundColour));
  
      //Setting the ViewPager as the tabs
      mTabs.setViewPager(mPager);
  
  }
  
  public void initialize() {
  
      if (mToolbar != null) {
          //Use current toolbar
          setSupportActionBar(mToolbar);
      } else {
          mToolbar = (android.support.v7.widget.Toolbar)
   findViewById(R.id.toolbar);
      }
  
      mPager = (ViewPager) findViewById(R.id.pager);
      //Setting the Adapter on the view pager first. Passing the fragment manager through as an argument
      mPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
      mTabs = (SlidingTabLayout) findViewById(R.id.tabs);
  
      //Setting the custom Tab View as the Sliding Tabs Layout
      mTabs.setCustomTabView(R.layout.custom_tab_view, R.id.tabText);
  
      mTabs.setDistributeEvenly(true);
  
      //mTabs.setSelectedIndicatorColors(getResources().getColor(R.color.tabIndicatorColour));
  
      mTabs.setBackgroundColor(getResources().getColor(R.color.basePrimaryBackgroundColour));
  
      //Setting the ViewPager as the tabs
      mTabs.setViewPager(mPager);
  
  }
  
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
  }
  
  @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;
      }
  
      return super.onOptionsItemSelected(item);
  }
  
  public SlidingTabLayout getSlidingTabLayout() {
      return mTabs;
  }
  
  public ViewPager getViewPager() {
      return mPager;
  }
  
  class MyPagerAdapter extends FragmentPagerAdapter {
  
      //Setting up integer array of icons
      int icons[] = {R.drawable.about_us, R.drawable.campus, R.drawable.events, R.drawable.learning, R.drawable.sewa};
  
      //Defined from strings.xml
      String[] tabText = getResources().getStringArray(R.array.tabs);
  
      public MyPagerAdapter(FragmentManager fm) {
          super(fm);
          //Initialising the strings array of tabs
          tabText = getResources().getStringArray(R.array.tabs);
      }
  
      @Override
      public Fragment getItem(int position) {
  
          //Initialising Fragment
          //Passing in the position so that position of the fragment is returned
          MyFragment myFragment = MyFragment.getInstance(position);
  
          return myFragment;
      }
  
      @Override
      public CharSequence getPageTitle(int position) {
  
          //Constructing drawable object from the icon position
          Drawable drawable = getResources().getDrawable(icons[position]);
  
          //Defining the bounds for each icon as this is not automatically calculated
          drawable.setBounds(0, 0, 90, 90);
  
          //Passing icons as drawable objects into the imageSpan. This means it can be placed amongst the text
          ImageSpan imageSpan = new ImageSpan(drawable);
  
          //Spannable strings allows us to embed images with text (attach/detach images)
          SpannableString spannableString = new SpannableString(" ");
  
          //Here setting the span of the icons amongst the scroll bar. Using the array of icons, starting at position 0,
          //till the end, SPAN_EXCLUSIVE_EXCLUSIVE will ensure only the images in the range are included, nothing more,
          //nothing less
          spannableString.setSpan(imageSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  
          //Return the spannable string with icons embedded
          return spannableString;
      }
  
      @Override
      public int getCount() {
          return 5;
      }
  }
  
  public static class MyFragment extends Fragment {
  
      private TextView textView;
  
      //Method to return instance of the fragment. Passing in position to show which position is currently being shown in the fragment
      public static MyFragment getInstance(int position) {
          //Construct the fragment
          MyFragment myFragment = new MyFragment();
  
          //New bundle instance
          Bundle args = new Bundle();
  
          //Passing in the Integer position of the fragment into the argument
          args.putInt("position", position);
  
          //Setting the argument of the fragment to be the position
          myFragment.setArguments(args);
  
          //Return the fragment
          return myFragment;
      }
  
      @Override
      //This will handle how the fragment will display content
      public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle saveInstanceState) {
          //Inflate the fragment_main layout
          View layout = inflater.inflate(R.layout.fragment_main, container, false);
  
          //Initialising the text view
          textView = (TextView) layout.findViewById(R.id.position);
  
          //Getting a reference to the TextView (as defined in fragment_main) and set it to a value
          Bundle bundle = getArguments();
  
          //Safety Check
          if (bundle != null) {
              textView.setText("The page currently selected is " + bundle.getInt("position"));
          }
  
          return layout;
      }
  }
  }
  </code></pre>
  
  <p><strong>and here's my layout:</strong></p>
  
  <pre><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical"
      android:paddingBottom="10dp"
      android:paddingLeft="0dp"
      android:paddingRight="0dp"
      android:paddingTop="0dp"
      tools:context=".MainActivityFragment"&gt;
  
      &lt;android.support.v7.widget.Toolbar 
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:toolbar="http://schemas.android.com/apk/res-auto"
          android:id="@+id/toolbar"
          android:layout_width="match_parent"
          android:layout_height="?actionBarSize"
          toolbar:theme="@style/ActionBarThemeOverlay"
          toolbar:titleTextAppearance="@style/ActionBar.TitleText"&gt;
      &lt;/android.support.v7.widget.Toolbar&gt;
  
      &lt;com.divyeshbc.slidingscrollbar.tabs.SlidingTabLayout
          android:id="@+id/tabs"
          android:layout_width="match_parent"
          android:layout_height="wrap_content" /&gt;
  
      &lt;android.support.v4.view.ViewPager
          android:id="@+id/pager"
          android:layout_width="match_parent"
          android:layout_height="0dp"
          android:layout_weight="1" /&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>and here's my styles:</p>
  
  <pre><code>    &lt;resources&gt;
  
          &lt;!-- Base application theme. --&gt;
          &lt;style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"&gt; &lt;!--No Action Bar as the main theme is being replaced by custom Theme--&gt;
          &lt;/style&gt;
          &lt;!-- Customize your theme here. --&gt;
  
          &lt;!--Creating a Base--&gt;
          &lt;style name="Theme.Base" parent="AppTheme"&gt;
              &lt;!--Similar to Inheritance, inheriting from AppTheme and extending ie. overriding defaults for custom--&gt;
              &lt;!--Mapping actual android colour properties to our custom colours--&gt;
              &lt;item name="colorPrimary"&gt;@color/basePrimaryBackgroundColour
                  &lt;/item&gt; &lt;!--Background colour--&gt;
              &lt;item name="colorPrimaryDark"&gt;
                   @color/baseSecondaryBackgroundColour&lt;/item&gt;
              &lt;item name="windowActionBar"&gt;false
                   &lt;/item&gt; &lt;!--Not using an Action Bar--&gt;
              &lt;item name="android:windowNoTitle"&gt;true&lt;/item&gt; 
                           &lt;!--Don't want to show a title--&gt;
              &lt;item name="android:windowBackground"&gt;
                    @color/baseBackgroundColour&lt;/item&gt; 
                           &lt;!--Default Background Coloer--&gt;
          &lt;/style&gt;
  
          &lt;!--Basic Theme. Theme.Custom inherits from theme.base 
              which inherits from AppTheme --&gt;
          &lt;style name="Theme.Custom" parent="Theme.Base"/&gt;
  
      &lt;!-- The theme that will override the default action bar --&gt;
      &lt;style name="ActionBarThemeOverlay" parent=""&gt;
          &lt;item name="android:textColorPrimary"&gt;
              @color/basePrimaryTextColour&lt;/item&gt;
          &lt;item name="colorControlHighlight"&gt;
              @color/baseBackgroundColour&lt;/item&gt;
          &lt;item name="android:actionMenuTextColor"&gt;
              @color/basePrimaryTextColour&lt;/item&gt;
          &lt;item name="android:textColorSecondary"&gt;
              @color/baseSecondaryTextColour&lt;/item&gt;
          &lt;item name="android:background"&gt;
              @color/basePrimaryBackgroundColour&lt;/item&gt;
      &lt;/style&gt;
  
      &lt;!--Action Bar Title Text --&gt;
      &lt;style name="ActionBar.TitleText" 
             parent="TextAppearance.AppCompat.Widget.ActionBar.Title"&gt;
       &lt;!--Action Bar Title Text --&gt;
  &lt;style name="ActionBar.TitleText" parent="TextAppearance.AppCompat.Widget.ActionBar.Title"&gt;
      &lt;item name="android:textColor"&gt;@color/basePrimaryTextColour&lt;/item&gt;
      &lt;item name="android:textSize"&gt;18sp&lt;/item&gt; &lt;!-- Standard Pixels --&gt;
  &lt;/style&gt;
  
      &lt;/resources&gt;
  </code></pre>
  
  <p>I can't get StackOverflow to accept the last bit of style code. If it's important I'll find a way to post it. It's just a few lines defining Titletext, color and font size.</p>