在应用程序运行时添加EditText小部件

时间:2013-05-05 13:26:36

标签: android android-layout android-widget android-spinner

我正在尝试在应用运行时添加EditText小部件,我不知道该怎么做。我希望有可能。 我想要做的是用户将从微调器列表中选择一个项目,然后将出现编辑文本。 例如,微调器包含人类外观的属性,用户可以决定是否要添加“头发形状”或“眼睛颜色”EditText字段或旋转器中的内容。

我做了下面的代码,但是当我尝试时,当我从微调器中选择项目时没有任何反应。

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {

    switch(arg1.getId())
    {

    case R.id.parametersChoose: 

    LinearLayout test = (LinearLayout) findViewById(R.id.test);
    EditText field = new EditText(this);

    LayoutParams b = new LayoutParams(50, 30);
    field.setLayoutParams(b);
    field.setText("enter" + parametersChoose.getSelectedItem().toString());

    switch(parametersChoose.getSelectedItemPosition())
    {
    case 1:
        field.setId(1);

    }

    test.addView(field);

    }            
}

   <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        xmlns:android="http://schemas.android.com/apk/res/android">


         <Button
            android:id="@+id/addWorkOut"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="save" />

         <TextView
             android:id="@+id/textView1"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="Set new Exercise type" />

         <EditText
             android:id="@+id/newExercise"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:ems="10" >

         </EditText>

         <Spinner
             android:id="@+id/workOutChoose"
             android:layout_width="match_parent"
             android:layout_height="wrap_content" />

         <Spinner
             android:id="@+id/parametersChoose"
             android:layout_width="match_parent"
             android:layout_height="wrap_content" />

            <ScrollView
                android:id="@+id/scroll"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >

                <LinearLayout
                    android:id="@+id/test"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" >



                    <EditText
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:ems="10" >
                    </EditText>


                </LinearLayout>

             </ScrollView>



       ></LinearLayout>

3 个答案:

答案 0 :(得分:0)

为什么在运行之前你还没有创建一个edittext小部件,但是在运行它之前让它不可见,直到你希望它再次可见为止。只需将属性设置为可见就可以看到它!

答案 1 :(得分:0)

更改此

 ScrollView test = (ScrollView) findViewById(R.id.scroll);

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

根据ScrollView Docs

  

ScrollView是一个FrameLayout,意味着您应该在其中放置一个包含要滚动的全部内容的子项;这个子本身可能是一个具有复杂对象层次结构的布局管理器。

您正在为ScrollView多个直接孩子提供xml中的LinearLayout以及您以编程方式创建的EditText。将新的EditText添加到LinearLayout

内的ScrollView

答案 2 :(得分:0)

我发现了我的问题。 当使用2个或更多个微调器并试图通过switch调用它们时,参数View arg1并不指向微调器他自己,而是指向行。 为了调用微调器自己需要调用父窗口小部件。值是来自AdapterView<?> arg0。 代码需要如下所示:

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {

        switch(arg0.getId())
        {
    ....
    ....
    ....