Nullzeigerausnahme in Fragmenten

Beim Starten eines Fragments von einem anderen Fragment erhalte ich die NullPointerException. Ich versuche, eine Methode im zweiten Fragment nach dem dynamischen Starten des Fragments aufzurufen.

Hier ist mein Logcat:

05-20 09:58:31.907: E/AndroidRuntime(2585): FATAL EXCEPTION: main
05-20 09:58:31.907: E/AndroidRuntime(2585): java.lang.NullPointerException
05-20 09:58:31.907: E/AndroidRuntime(2585):     at com.exercise.FragmentTest.MyFragment3.setImage(MyFragment3.java:22)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at com.exercise.FragmentTest.FragmentTestActivity$1.onClick(FragmentTestActivity.java:48)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at android.view.View.performClick(View.java:4204)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at android.view.View$PerformClick.run(View.java:17355)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at android.os.Handler.handleCallback(Handler.java:725)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at android.os.Looper.loop(Looper.java:137)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at android.app.ActivityThread.main(ActivityThread.java:5041)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at java.lang.reflect.Method.invokeNative(Native Method)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at java.lang.reflect.Method.invoke(Method.java:511)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-20 09:58:31.907: E/AndroidRuntime(2585):     at dalvik.system.NativeStart.main(Native Method)

Und mein Hauptaktivitätscode:

public class FragmentTestActivity extends FragmentActivity{

    Fragment fragment;
    Button btnFragment1, btnFragment2, btnFragment3;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btnFragment1 = (Button)findViewById(R.id.displayfragment1);
        btnFragment2 = (Button)findViewById(R.id.displayfragment2);
        btnFragment3 = (Button)findViewById(R.id.displayfragment3);

       // get an instance of FragmentTransaction from your Activity 
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        //add a fragment 
        MyFragment myFragment = new MyFragment();
        fragmentTransaction.add(R.id.myfragment, myFragment);
        fragmentTransaction.commit();

        btnFragment1.setOnClickListener(btnFragmentOnClickListener);
        btnFragment2.setOnClickListener(btnFragmentOnClickListener);
        btnFragment3.setOnClickListener(btnFragmentOnClickListener);
    }

    Button.OnClickListener btnFragmentOnClickListener
    = new Button.OnClickListener(){

        @Override
        public void onClick(View v) {


            if(v == btnFragment3){
                MyFragment3 newfragment = new MyFragment3();

                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

                // Replace whatever is in the fragment_container view with this fragment,
                // and add the transaction to the back stack
                transaction.replace(R.id.myfragment, newfragment);
                transaction.addToBackStack(null);

                // Commit the transaction
                transaction.commit();
                            newfragment.setImage();
                return;

            }


            // TODO Auto-generated method stub
            Fragment newFragment = null;

            // Create new fragment
            if(v == btnFragment1){
                newFragment = new MyFragment();
            }
                else if(v == btnFragment2){
                    newFragment = new MyFragment2();
                }


            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

            // Replace whatever is in the fragment_container view with this fragment,
            // and add the transaction to the back stack
            transaction.replace(R.id.myfragment, newFragment);
            transaction.addToBackStack(null);

            // Commit the transaction
            transaction.commit();

            // Create new transaction

        }};

}

Und meine Fragment3 Klasse ist:

public class MyFragment3 extends Fragment {
    ImageView iv;
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
       Bundle savedInstanceState) {
      // TODO Auto-generated method stub
      View myFragmentView = inflater.inflate(R.layout.fragmentlayout3, container, false);
      iv = (ImageView)myFragmentView.findViewById(R.id.image); 

      return myFragmentView;
     }
     public void setImage(){
         iv.setImageResource(R.drawable.penguins);
     }
}

Bitte helfen Sie mir, dieses Problem zu überwinden.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage