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 :(得分: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();
}