我一直在尋找如何動態地添加按鈕,並且始終找到相同或非常類似的解決方案,但它只是拒絕與我一起工作。每當我運行應用程序時,它立即崩潰,我不確定我做錯了什麼。當試圖將按鈕動態添加到佈局時崩潰
public class FindCalls extends Activity {
Button b;
LinearLayout layout;
LayoutParams lp;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_find_calls);
initialize();
}
public void initialize() {
layout = (LinearLayout) findViewById(R.layout.activity_find_calls);
lp = new LayoutParams(LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
b = new Button(this);
layout.addView(b, lp);
setContentView(layout);
}
}
activity_find_calls xml包含一個LinearLayout。
logcat的
05-20 17:22:44.191: E/Trace(12959): error opening trace file: No such file or directory (2)
05-20 17:22:44.449: E/AndroidRuntime(12959): FATAL EXCEPTION: main
05-20 17:22:44.449: E/AndroidRuntime(12959): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.callfinder/com.example.callfinder.FindCalls}: java.lang.NullPointerException
05-20 17:22:44.449: E/AndroidRuntime(12959): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
05-20 17:22:44.449: E/AndroidRuntime(12959): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2356)
05-20 17:22:44.449: E/AndroidRuntime(12959): at android.app.ActivityThread.access$600(ActivityThread.java:150)
05-20 17:22:44.449: E/AndroidRuntime(12959): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
05-20 17:22:44.449: E/AndroidRuntime(12959): at android.os.Handler.dispatchMessage(Handler.java:99)
05-20 17:22:44.449: E/AndroidRuntime(12959): at android.os.Looper.loop(Looper.java:137)
05-20 17:22:44.449: E/AndroidRuntime(12959): at android.app.ActivityThread.main(ActivityThread.java:5195)
05-20 17:22:44.449: E/AndroidRuntime(12959): at java.lang.reflect.Method.invokeNative(Native Method)
05-20 17:22:44.449: E/AndroidRuntime(12959): at java.lang.reflect.Method.invoke(Method.java:511)
05-20 17:22:44.449: E/AndroidRuntime(12959): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
05-20 17:22:44.449: E/AndroidRuntime(12959): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
05-20 17:22:44.449: E/AndroidRuntime(12959): at dalvik.system.NativeStart.main(Native Method)
05-20 17:22:44.449: E/AndroidRuntime(12959): Caused by: java.lang.NullPointerException
05-20 17:22:44.449: E/AndroidRuntime(12959): at com.example.callfinder.FindCalls.initialize(FindCalls.java:28)
05-20 17:22:44.449: E/AndroidRuntime(12959): at com.example.callfinder.FindCalls.onCreate(FindCalls.java:18)
05-20 17:22:44.449: E/AndroidRuntime(12959): at android.app.Activity.performCreate(Activity.java:5104)
05-20 17:22:44.449: E/AndroidRuntime(12959): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
05-20 17:22:44.449: E/AndroidRuntime(12959): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2260)
05-20 17:22:44.449: E/AndroidRuntime(12959): ... 11 more
當我註釋掉佈局的setContentView所以我有理由相信,是什麼導致了問題的應用程序運行。
什麼是LogCat輸出?並且順便失去一個setContentView,它應該只是一個在onCreate –
在你的'initialize()'方法中,'findViewById()'調用應該使用佈局文件中'LinearLayout'的資源ID,而不是佈局文件本身的ID。正如Marko Lazic所說,不要在'initialize()'方法中調用'setContentView'。 – Squonk