title: Android Null Pointer Exception in Fragment OnActivityCreated Method
body: <p>I have a fairly simple program where I am playing around with fragments.  It consists of one activity (ComponentsActivity) which has one fragment (ComponentsFragment) attached when in portrait view.  When switching to landscape, the ComponentsFragment remain on the left side of the screen and an ArticleFragment is added to the right side.  Everything works when starting in portrait, and switching to landscape works as well, but attempting to switch back to portrait after being in landscape causes a Null Pointer Exception in the ArticleFragment's OnActivityCreated method.  I'm not really sure why this method is even being called as the activity should be recreating itself with the single ComponentsFragment.</p>
  <p>Here is the activity code:</p>
  <pre><code>package com.cab.apitesting;
  
  import android.content.res.Configuration;
  import android.os.Bundle;
  import android.support.v4.app.FragmentActivity;
  import android.support.v4.app.FragmentTransaction;
  import android.view.View;
  
  public class ComponentsActivity extends FragmentActivity implements ComponentsFragment.OnArticleSelectedListener {
      boolean mDualPane;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_components);
  
          View articleContainer = findViewById(R.id.article_container);
          mDualPane = articleContainer != null &amp;&amp; articleContainer.getVisibility() == View.VISIBLE;
  
          FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
          transaction.add(R.id.fragment_container, ComponentsFragment.newInstance());
          transaction.commit();
  
          if (mDualPane) {
              FragmentTransaction transaction2 = getSupportFragmentManager().beginTransaction();
              transaction2.add(R.id.article_container, ArticleFragment.newInstance(1));
              transaction2.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
              transaction2.addToBackStack(null);
              transaction2.commit();
          }
      }
  
      @Override
      public void onArticleSelected(int id) {
          int articleIndex = 0;
  
          switch (id) {
              case R.id.button_article_one:
                  articleIndex = 1;
                  break;
              case R.id.button_article_two:
                  articleIndex = 2;
                  break;
              case R.id.button_article_three:
                  articleIndex = 3;
                  break;
              default:
                  break;
          }
  
          if (mDualPane) {
              FragmentTransaction transaction3 = getSupportFragmentManager().beginTransaction();
              transaction3.add(R.id.article_container, ArticleFragment.newInstance(articleIndex));
              transaction3.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
              transaction3.commit();
          } else {
              FragmentTransaction transaction3 = getSupportFragmentManager().beginTransaction();
              transaction3.replace(R.id.fragment_container, ArticleFragment.newInstance(articleIndex));
              transaction3.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
              transaction3.addToBackStack(null);
              transaction3.commit();
          }
      }
  }
  </code></pre>
  <p>Here is the ComponentsFragment code:</p>
  <pre><code>package com.cab.apitesting;
  
  import android.app.Activity;
  import android.content.ContentUris;
  import android.content.Intent;
  import android.database.Cursor;
  import android.net.Uri;
  import android.os.Bundle;
  import android.provider.ContactsContract;
  import android.support.v4.app.Fragment;
  import android.util.Log;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.Button;
  import android.widget.TextView;
  
  public class ComponentsFragment extends Fragment { 
      Button artOneButton;
      Button artTwoButton;
      Button artThreeButton;
  
      OnArticleSelectedListener mArticleListener;
  
      public static ComponentsFragment newInstance() {
          ComponentsFragment f = new ComponentsFragment();
          Bundle args = new Bundle();
          f.setArguments(args);
  
          return f;
      }
  
      @Override
      public void onAttach(Activity activity) {
          super.onAttach(activity);
  
          try {
              mArticleListener = (OnArticleSelectedListener) activity;
          } catch (ClassCastException e) {
              throw new ClassCastException(activity.toString() + &quot; must implement OnArticleSelectedListener&quot;);
          }
      }
  
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          return inflater.inflate(R.layout.fragment_components, container, false);
      }
  
      @Override
      public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
  
          artOneButton = (Button)getView().findViewById(R.id.button_article_one);
          artOneButton.setOnClickListener(onClick);
  
          artTwoButton = (Button)getView().findViewById(R.id.button_article_two);
          artTwoButton.setOnClickListener(onClick);
  
          artThreeButton = (Button)getView().findViewById(R.id.button_article_three);
          artThreeButton.setOnClickListener(onClick);
      }
  
      private View.OnClickListener onClick = new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              Intent intent;
  
              switch (view.getId()) {
                  case R.id.button_article_one:
                  case R.id.button_article_two:
                  case R.id.button_article_three:
                      mArticleListener.onArticleSelected(view.getId());
                      break;
                  default:
                      break;
              }
          }
      };
  
      public interface OnArticleSelectedListener {
          public void onArticleSelected(int id);
      }
  }
  </code></pre>
  <p>And here is the ArticleFragments code:</p>
  <pre><code>package com.cab.apitesting;
  
  import android.content.res.Configuration;
  import android.os.Bundle;
  import android.support.v4.app.Fragment;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.TextView;
  
  public class ArticleFragment extends Fragment {
      private static String[] articles = {
              &quot;Bacon ipsum dolor sit amet ribeye nulla labore cow. Reprehenderit meatball pork belly non, laborum commodo tail. Aliquip nulla ad ham hock. Sausage swine jerky nulla consectetur in voluptate short loin ham hock tempor. Ball tip tenderloin excepteur strip steak in. Incididunt pork chop dolor, nisi short ribs ex mollit proident consequat.\n&quot; +
                      &quot;\n&quot; +
                      &quot;Velit sirloin doner brisket leberkas andouille elit rump. Cow est pariatur fugiat. Culpa shankle jowl andouille. Chuck beef ribs fatback ut, aliquip duis doner aute.\n&quot; +
                      &quot;\n&quot; +
                      &quot;T-bone consectetur filet mignon dolore beef ribs mollit, tenderloin esse tempor leberkas labore meatloaf ball tip. Jerky filet mignon meatloaf, officia pastrami voluptate beef drumstick capicola aute chuck shoulder venison short ribs. Fugiat ad enim venison, frankfurter rump beef ribs pancetta. Duis laborum in corned beef dolor in. Ball tip leberkas esse, pariatur commodo bacon jerky jowl pancetta bresaola tongue minim aliqua t-bone meatloaf. Ham sint tongue ut sunt pig culpa anim beef sirloin do. Irure jerky dolore tenderloin ball tip mollit ham hock, boudin eiusmod cow exercitation strip steak in filet mignon.\n&quot; +
                      &quot;\n&quot; +
                      &quot;Deserunt veniam meatloaf cupidatat meatball chicken sed qui cow consectetur filet mignon. Ad officia adipisicing, pig biltong nostrud nulla sirloin in sausage velit. Ut laborum meatloaf, tail exercitation consectetur officia fatback sirloin. Venison incididunt strip steak ham, sint ut pancetta cupidatat aliquip eiusmod in officia leberkas filet mignon. Beef ribs laborum kielbasa mollit boudin beef. Tri-tip ball tip pig nulla dolor ut pork chop aliqua corned beef sirloin t-bone. Ea adipisicing elit turkey velit id.\n&quot; +
                      &quot;\n&quot; +
                      &quot;Shank leberkas dolore pork chop nostrud qui short loin. Commodo ad ex aute proident elit filet mignon qui aliqua laborum kielbasa beef ribs ball tip labore. Voluptate laboris ut biltong incididunt corned beef. Ham hock kielbasa bresaola, shankle sint eu in reprehenderit minim excepteur frankfurter id sirloin commodo ut.&quot;,
              &quot;Your bones don't break, mine do. That's clear. Your cells react to bacteria and viruses differently than mine. You don't get sick, I do. That's also clear. But for some reason, you and I react the exact same way to water. We swallow it too fast, we choke. We get some in our lungs, we drown. However unreal it may seem, we are connected, you and I. We're on the same curve, just on opposite ends.\n&quot;
      };
  
      public static ArticleFragment newInstance(int index) {
          ArticleFragment f = new ArticleFragment();
          Bundle args = new Bundle();
          args.putInt(&quot;index&quot;, index);
          f.setArguments(args);
  
          return f;
      }
  
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          return inflater.inflate(R.layout.fragment_article, container, false);
      }
  
     @Override
  public void onActivityCreated(Bundle savedInstanceState) {
      super.onActivityCreated(savedInstanceState);
  
      TextView article = (TextView)getActivity().findViewById(R.id.textview_article);
      int index = getArguments().getInt(&quot;index&quot;);
      article.setText(articles[index - 1]);
  }
  }
  </code></pre>
  <p>Here is the error log:</p>
  <pre><code>08-20 15:35:58.214    1328-1328/com.cab.apitesting E/AndroidRuntime: FATAL EXCEPTION: main
          java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cab.apitesting/com.cab.apitesting.ComponentsActivity}: java.lang.NullPointerException
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
          at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3692)
          at android.app.ActivityThread.access$700(ActivityThread.java:141)
          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1240)
          at android.os.Handler.dispatchMessage(Handler.java:99)
          at android.os.Looper.loop(Looper.java:137)
          at android.app.ActivityThread.main(ActivityThread.java:5041)
          at java.lang.reflect.Method.invokeNative(Native Method)
          at java.lang.reflect.Method.invoke(Method.java:511)
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
          at dalvik.system.NativeStart.main(Native Method)
          Caused by: java.lang.NullPointerException
          at com.cab.apitesting.ArticleFragment.onActivityCreated(ArticleFragment.java:62)
          at android.support.v4.app.Fragment.performStart(Fragment.java:1484)
          at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:941)
          at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
          at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
          at android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1866)
          at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:568)
          at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1164)
          at android.app.Activity.performStart(Activity.java:5114)
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
          ... 12 more
  </code></pre>
  <p>The line that is causing the error is:</p>
  <pre><code>article.setText(articles[index - 1]);
  </code></pre>
  <p>in the ArticleFragment class.  I'm assuming this is failing because the article variable is null (as it should be because the ArticleFragment shouldnt exist when the app is in portrait mode).  But why is the OnActivityCreated method being called in a fragment that shouldn't even exist?</p>