以编程方式生成的文本字段未显示在Android应用中

时间:2015-03-11 19:27:24

标签: java android xml

我正在尝试以编程方式使用Java在Android应用程序上生成一些UI元素。我在XML文件中创建了一个ScrollView,我正在尝试创建并向该ScrollView添加一堆UI元素。所有UI元素组成1个边界框,如下所示:

http://i.imgur.com/pwI8MNi.jpg

边界框只是一个带有图像背景的线性布局,一些文本框和标签位于其顶部。我希望我的代码是模块化的,所以我创建了一个名为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函数中实例化它,它会运行但不会创建文本视图。

1 个答案:

答案 0 :(得分:0)

你的代码太乱了,它甚至不能正常工作。

1)你永远不应该通过new创建活动。永远。这不是有效的。

2)以编程方式创建LinearLayout。但你无处可加。如果它没有添加到任何地方,您希望它显示在哪里?

3)为什么你想在选项菜单代码中创建一个视图?再次,您正在创建框,但没有对其创建的视图执行任何操作。另外,如果你想创建一个包含大量视图的类,它实际上应该派生自ViewGroup。

4)即使1是有效的(它不是),也不要使用findViewById返回null,因为没有调用onCreate所以没有设置contentView。但无论如何这都不是有效的,所以不要试着打电话给它。相反,您希望通过构造函数传递父视图,或者更好地使BoundingBox成为ViewGroup子类并将其直接添加到父级。