0

I have application with fragments, and I want to switch between them by a button-operated activity. Here is my try. How can I do it?

public class StartActivity extends Activity {

    public static Context appContext;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Fragment
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction =
            fragmentManager.beginTransaction();

        MeinFragment A_fragment = new MeinFragment();
        fragmentTransaction.replace(android.R.id.content, A_fragment);

        fragmentTransaction.commit();

        ImageButton BTN1 = (ImageButton) findViewById(R.id.leftButton);
        BTN1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                SearchFragment A_fragment = new SearchFragment();
                fragmentTransaction.replace(android.R.id.content, A_fragment);

            }
        }); 
    }
}

My second try, but application crashed.

public class StartActivity extends Activity { public static Context appContext;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();


    MeinFragment A_fragment = new MeinFragment();


    fragmentTransaction.replace(android.R.id.content, A_fragment);

    fragmentTransaction.commit();


  //Fragments changing
    ImageButton BTN1 = (ImageButton) findViewById(R.id.leftButton);
   BTN1.setOnClickListener(new OnClickListener() {
       public void onClick(View v) {



          FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction =                        fragmentManager.beginTransaction();


          SearchFragment B_fragment = new SearchFragment();
            fragmentTransaction.replace(android.R.id.content, B_fragment);
            fragmentTransaction.commit();

       }
       });

}

}

And logcat:

01-27 17:37:51.412: E/AndroidRuntime(3339): FATAL EXCEPTION: main 01-27 17:37:51.412: E/AndroidRuntime(3339): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.arvidg.exampleactionbartabs/de.arvidg.exampleactionbartabs.StartActivity}: java.lang.NullPointerException 01-27 17:37:51.412: E/AndroidRuntime(3339): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 01-27 17:37:51.412: E/AndroidRuntime(3339): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 01-27 17:37:51.412: E/AndroidRuntime(3339): at android.app.ActivityThread.access$600(ActivityThread.java:141) 01-27 17:37:51.412: E/AndroidRuntime(3339): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 01-27 17:37:51.412: E/AndroidRuntime(3339): at android.os.Handler.dispatchMessage(Handler.java:99) 01-27 17:37:51.412: E/AndroidRuntime(3339): at android.os.Looper.loop(Looper.java:137) 01-27 17:37:51.412: E/AndroidRuntime(3339): at android.app.ActivityThread.main(ActivityThread.java:5103) 01-27 17:37:51.412: E/AndroidRuntime(3339): at java.lang.reflect.Method.invokeNative(Native Method) 01-27 17:37:51.412: E/AndroidRuntime(3339): at java.lang.reflect.Method.invoke(Method.java:525) 01-27 17:37:51.412: E/AndroidRuntime(3339): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 01-27 17:37:51.412: E/AndroidRuntime(3339): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 01-27 17:37:51.412: E/AndroidRuntime(3339): at dalvik.system.NativeStart.main(Native Method) 01-27 17:37:51.412: E/AndroidRuntime(3339): Caused by: java.lang.NullPointerException 01-27 17:37:51.412: E/AndroidRuntime(3339): at de.arvidg.exampleactionbartabs.StartActivity.onCreate(StartActivity.java:52) 01-27 17:37:51.412: E/AndroidRuntime(3339): at android.app.Activity.performCreate(Activity.java:5133) 01-27 17:37:51.412: E/AndroidRuntime(3339): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 01-27 17:37:51.412: E/AndroidRuntime(3339): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 01-27 17:37:51.412: E/AndroidRuntime(3339): ... 11 more

Petr Karel
  • 53
  • 7

2 Answers2

0
fragmentTransaction
    .beginTransaction()
    .replace(android.R.id.content, A_fragment)
    .commit();

you need to begin transaction and commit to complete operation.

Orhan Obut
  • 8,756
  • 5
  • 32
  • 42
0

Refering to javadoc for FragmentTransaction.beginTransaction():

Note: A fragment transaction can only be created/committed prior to an activity saving its state. If you try to commit a transaction after Activity.onSaveInstanceState() (and prior to a following Activity.onStart or Activity.onResume(), you will get an error. This is because the framework takes care of saving your current fragments in the state, and if changes are made after the state is saved then they will be lost.