我正在尝试以编程方式使用Java在Android应用程序上生成一些UI元素。我在XML文件中创建了一个ScrollView,我正在尝试创建并向该ScrollView添加一堆UI元素。所有UI元素组成1个边界框,如下所示:
边界框只是一个带有图像背景的线性布局,一些文本框和标签位于其顶部。我希望我的代码是模块化的,所以我创建了一个名为BoundingBox的类,它应该在每次实例化BoundingBox类时为应用程序创建并添加一个边界框。
这是我到目前为止对于BoundingBox类的内容(它不完整,到目前为止它添加的是一个带有文本的textview)。
public class BoundingBox {
//Instantiate the main app activity.
MainActivity theMainActivity = new MainActivity();
//Create Scrollview object and set it to the XML GUI scrollview
ScrollView sv = (ScrollView) theMainActivity.findViewById(R.id.theMainScrollView);
public BoundingBox(){
//Create linear layout that will sit in the scrollview.
LinearLayout mainLinearLayout = new LinearLayout(theMainActivity);
TextView exerciseName = new TextView(theMainActivity);
TextView repBox1 = new TextView(theMainActivity);
TextView repBox2 = new TextView(theMainActivity);
TextView repBox3 = new TextView(theMainActivity);
TextView repBox4 = new TextView(theMainActivity);
//Add the Linear Layout to the existing scroll view.
sv.addView(mainLinearLayout);
//Add text box to linear layout
mainLinearLayout.addView(exerciseName);
exerciseName.setText("This doesn't work.");
}
}
以下是我在主Activity中实例化的方法:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
BoundingBox sc = new BoundingBox();
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
代码编译成功但我的Android应用中没有显示任何文字。如果我实例化了类,那么它应该已经在BoundingBox构造函数中运行了代码,该构造函数应该创建了一个文本视图。我不确定我做错了什么,因为代码编译成功,logcat并没有告诉我什么。如果我在onCreate()函数中实例化边界框类,则应用程序在启动时会崩溃。如果我在onCreateOptionsMenu函数中实例化它,它会运行但不会创建文本视图。
答案 0 :(得分:0)
你的代码太乱了,它甚至不能正常工作。
1)你永远不应该通过new创建活动。永远。这不是有效的。
2)以编程方式创建LinearLayout。但你无处可加。如果它没有添加到任何地方,您希望它显示在哪里?
3)为什么你想在选项菜单代码中创建一个视图?再次,您正在创建框,但没有对其创建的视图执行任何操作。另外,如果你想创建一个包含大量视图的类,它实际上应该派生自ViewGroup。
4)即使1是有效的(它不是),也不要使用findViewById返回null,因为没有调用onCreate所以没有设置contentView。但无论如何这都不是有效的,所以不要试着打电话给它。相反,您希望通过构造函数传递父视图,或者更好地使BoundingBox成为ViewGroup子类并将其直接添加到父级。