0

我正在尝试在应用程序运行时添加 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>
4

3 回答 3

0

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

于 2013-05-05T13:33:47.260 回答
0

改变这个

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

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

根据ScrollView Docs

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

您正在给您的ScrollView多个直接孩子提供LinearLayout您在 xml 中拥有的,现在EditText您以编程方式创建的。将新事物添加EditText到您的LinearLayout内部ScrollView

于 2013-05-05T13:53:31.753 回答
0

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

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

        switch(arg0.getId())
        {
    ....
    ....
    ....
于 2013-05-06T08:04:05.447 回答