2014-06-13 60 views
0
public class MainActivity extends Activity { 
private Fragment fragment; 
private Button btn1, btn2, btn3; 
private Fragment newFragment; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 

    StartFragment myFragment = new StartFragment(); 
    ft.add(R.id.myFragment, myFragment); 
    ft.commit(); 

    buttonsPressed(); 

} 

private void buttonsPressed() { 
    // TODO Auto-generated method stub 
    btn1 = (Button)findViewById(R.id.button1); 
    btn1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      newFragment = new Fragment(); 
      Log.i("Button1", "Pressed"); 
     } 
    }); 
    btn2 = (Button)findViewById(R.id.button2); 
    btn2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      newFragment= new Fragment2(); 
     } 
    }); 
    btn3 = (Button)findViewById(R.id.button3); 
    btn3.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      newFragment = new Fragment3(); 
     } 
    }); 

    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.myFragment, newFragment); 
    transaction.commit(); 


} 

}试图让我的片段来代替我的其他片段

,所以我遵循在线教程创建的片段。现在我走了,试图看看我可以自己做什么。请记住,我是android编程的新手。我的按钮工作正常,但我的最后一段代码完全破坏了应用程序。我知道我的按钮是通过logcat测试工作的。当我把一段代码transaction.replace(R.id.myFragment,newFragment)它说不幸它已经停止。我离开吗?

logcat的错误

06-13 02:22:30.184: E/AndroidRuntime(21154): FATAL EXCEPTION: main 
06-13 02:22:30.184: E/AndroidRuntime(21154): Process: com.example.transitionfragments, PID: 21154 
06-13 02:22:30.184: E/AndroidRuntime(21154): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.transitionfragments/com.example.transitionfragments.MainActivity}: java.lang.NullPointerException 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.ActivityThread.access$900(ActivityThread.java:175) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.os.Handler.dispatchMessage(Handler.java:102) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.os.Looper.loop(Looper.java:146) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.ActivityThread.main(ActivityThread.java:5602) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at java.lang.reflect.Method.invokeNative(Native Method) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at java.lang.reflect.Method.invoke(Method.java:515) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at dalvik.system.NativeStart.main(Native Method) 
06-13 02:22:30.184: E/AndroidRuntime(21154): Caused by: java.lang.NullPointerException 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.BackStackRecord.doAddOp(BackStackRecord.java:395) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.BackStackRecord.replace(BackStackRecord.java:430) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.BackStackRecord.replace(BackStackRecord.java:422) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at com.example.transitionfragments.MainActivity.buttonsPressed(MainActivity.java:85) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at com.example.transitionfragments.MainActivity.onCreate(MainActivity.java:40) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.Activity.performCreate(Activity.java:5451) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
06-13 02:22:30.184: E/AndroidRuntime(21154): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377) 
06-13 02:22:30.184: E/AndroidRuntime(21154): ... 11 more 
06-13 02:24:31.813: E/AndroidRuntime(21362): FATAL EXCEPTION: main 
06-13 02:24:31.813: E/AndroidRuntime(21362): Process: com.example.transitionfragments, PID: 21362 
06-13 02:24:31.813: E/AndroidRuntime(21362): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.transitionfragments/com.example.transitionfragments.MainActivity}: java.lang.NullPointerException 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.app.ActivityThread.access$900(ActivityThread.java:175) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.os.Handler.dispatchMessage(Handler.java:102) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.os.Looper.loop(Looper.java:146) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.app.ActivityThread.main(ActivityThread.java:5602) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at java.lang.reflect.Method.invokeNative(Native Method) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at java.lang.reflect.Method.invoke(Method.java:515) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at dalvik.system.NativeStart.main(Native Method) 
06-13 02:24:31.813: E/AndroidRuntime(21362): Caused by: java.lang.NullPointerException 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.app.BackStackRecord.doAddOp(BackStackRecord.java:395) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.app.BackStackRecord.add(BackStackRecord.java:385) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at com.example.transitionfragments.MainActivity.buttonsPressed(MainActivity.java:84) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at com.example.transitionfragments.MainActivity.onCreate(MainActivity.java:40) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.app.Activity.performCreate(Activity.java:5451) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
06-13 02:24:31.813: E/AndroidRuntime(21362): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377) 
06-13 02:24:31.813: E/AndroidRuntime(21362): ... 11 more 
06-13 02:24:46.177: E/AndroidRuntime(21475): FATAL EXCEPTION: main 
06-13 02:24:46.177: E/AndroidRuntime(21475): Process: com.example.transitionfragments, PID: 21475 
06-13 02:24:46.177: E/AndroidRuntime(21475): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.transitionfragments/com.example.transitionfragments.MainActivity}: java.lang.NullPointerException 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.app.ActivityThread.access$900(ActivityThread.java:175) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.os.Handler.dispatchMessage(Handler.java:102) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.os.Looper.loop(Looper.java:146) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.app.ActivityThread.main(ActivityThread.java:5602) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at java.lang.reflect.Method.invokeNative(Native Method) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at java.lang.reflect.Method.invoke(Method.java:515) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at dalvik.system.NativeStart.main(Native Method) 
06-13 02:24:46.177: E/AndroidRuntime(21475): Caused by: java.lang.NullPointerException 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.app.BackStackRecord.doAddOp(BackStackRecord.java:395) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.app.BackStackRecord.add(BackStackRecord.java:385) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at com.example.transitionfragments.MainActivity.buttonsPressed(MainActivity.java:84) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at com.example.transitionfragments.MainActivity.onCreate(MainActivity.java:40) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.app.Activity.performCreate(Activity.java:5451) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
06-13 02:24:46.177: E/AndroidRuntime(21475): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377) 
06-13 02:24:46.177: E/AndroidRuntime(21475): ... 11 more 
+0

你能后的logcat的错误? 'R.id.myFragment'是你布局中的一个元素吗? – Wakim

+0

是的,我把它放在我的文章中。而myFragment是从另一个类创建的StartFragment myFragment = new StartFragment();它的默认片段显示在应用程序 – user3738988

回答

2

没有与码的顺序的问题。

您无法在该位置执行交易(buttonsPressed方法),因为newFragment未初始化(null),并在您单击任何按钮时进行初始化。

我建议你做此修改:

private void buttonsPressed() { 
    // TODO Auto-generated method stub 
    btn1 = (Button)findViewById(R.id.button1); 
    btn1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      newFragment = new Fragment(); 
      changeFragment(); // Change the fragment now 
      Log.i("Button1", "Pressed"); 
     } 
    }); 

    btn2 = (Button)findViewById(R.id.button2); 
    btn2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      newFragment= new Fragment2(); 
      changeFragment(); // Change the fragment now 
     } 
    }); 

    btn3 = (Button)findViewById(R.id.button3); 
    btn3.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      newFragment = new Fragment3(); 
      changeFragment(); // Change the fragment now 
     } 
    }); 
} 

// Method to replace the fragment after initializing newFragment variable 
protected void changeFragment() { 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.myFragment, newFragment); 
    transaction.commit(); 
} 
+0

谢谢我在你的帖子之前实际上做了这个,但你为什么没有工作的答案是完美的。谢谢。 – user3738988