如何在Android中动态创建按钮?

时间:2015-11-11 19:37:35

标签: java android eclipse

我正在构建我的第一个Android应用程序,我正在尝试使用最终将从SQLLite数据库填充的按钮填充屏幕。我无法弄清楚如何动态创建一个按钮。现在我的主要活动只有一个线性布局。当我尝试通过以下代码动态创建按钮时:

LinearLayout mainLayout = (LinearLayout)findViewById(R.id.mainLayout);

Button addButton =new Button(this);
addButton.setText("add");

mainLayout.addView(addButton);

我的应用程序启动然后意外退出,LogCat会抛出这些错误:

11-11 15:34:21.622: E/AndroidRuntime(16734): FATAL EXCEPTION: main
11-11 15:34:21.622: E/AndroidRuntime(16734): Process:
com.brycemacinnis.easycook, PID: 16734
11-11 15:34:21.622: E/AndroidRuntime(16734): java.lang.RuntimeException:
Unable to start activity  ComponentInfo{com.brycemacinnis.easycook/com.brycemacinnis.easycook.MainActivity
}:java.lang.NullPointerException: Attempt to invoke virtual method 'void
android.widget.LinearLayout.addView(android.view.View)' on a null object reference

我尝试了多种在线创建按钮的方法,但每次都发生相同的事情。反正有没有修复这个错误?最终我希望按钮进入scrollView。

1 个答案:

答案 0 :(得分:2)

您创建按钮的代码是正确的

Button addButton = new Button(this);

这里的问题就是这个问题:

android.widget.LinearLayout.addView(android.view.View)' on a null object reference

来自这一行:

mainLayout.addView(addButton);

<强>为什么吗

因为这行代码返回null:

findViewById(R.id.mainLayout);

为什么会返回null?

可能是因为你要么做得太早(例如在片段中的onCreate中),要么你为setContentView(R.layout.XXX)调用提供了错误的布局ID(如果你在一个活动中)。 / p>