2012-07-16 66 views
3

我想创建一个视图,用户可以在其中单击“加号”按钮并创建其他EditTexts。目标是拥有2个EditTexts基础,并且每次用户单击该按钮时,添加另外2个EditTexts。Android:在运行时创建EditText

我怎样才能做到这一点?我可以从Java添加EditTexts,但我无法弄清楚如何动态地添加和处理它们的列表。

我希望能够接受多对EditTexts,并将其推送到键/值HashMap或其他东西。

任何想法如何做到这一点?谢谢!

回答

4
public class MyActivity extends Activity { 

private LinearLayout main; 
private int id = 0; 
private List<EditText> editTexts = new ArrayList<EditText>(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    main = new LinearLayout(this); 
    main.setOrientation(LinearLayout.VERTICAL); 

    Button addButton = new Button(this); 
    addButton.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      addEditText(); 
     } 
    }); 

    Button submit = new Button(this); 
    submit.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      for (EditText editText : editTexts) { 
       editText.getText().toString(); 
       // whatever u want to do with the strings 
      } 
     } 
    }); 

    main.addView(addButton); 
    main.addView(submit); 
    setContentView(main); 
} 

private void addEditText() { 
    LinearLayout editTextLayout = new LinearLayout(this); 
    editTextLayout.setOrientation(LinearLayout.VERTICAL); 
    main.addView(editTextLayout); 

    EditText editText1 = new EditText(this); 
    editText1.setId(id++); 
    editTextLayout.addView(editText1); 

    editTexts.add(editText1); 

    EditText editText2 = new EditText(this); 
    editText2.setId(id++); 
    editTextLayout.addView(editText2); 

    editTexts.add(editText2); 

} 
+0

你的代码看起来很不错,它可以使用一些自动格式化,即使有基本概念,也可以用一段描述代码功能的句子。此外,用户希望通过'+'按钮单击添加_two_ EditTexts,而您可以简单地添加嵌套的LinearLayout,使用RelativeLayout将会更好... – Sam 2012-07-16 19:29:18

+0

我的不好,我没有完全读完这个问题,无论如何都欢呼! – eoghanm 2012-07-16 19:31:22

+0

感谢eoghanm。一个问题:我将如何从所有添加的editTexts收集数据?有没有像所有可见的editTexts函数中的“getText()”? – 2012-07-16 19:35:41

3

ListView中执行此操作。 然后,您可以将它们添加到ListAdapter。

然后用adapter.notifyDatasetChanged()

+0

多数民众赞成在一个伟大的想法!谢谢! – 2012-07-16 19:09:09

0

可能是我不太清楚,但不是添加个别编辑文本,你可以像线性布局添加为组视图在这里你可以使用任何标志值添加动态名称转换也。

该视图您可以更新到列表视图像列表视图中的膨胀行....

+0

好点斯里兰卡。我最终做的是膨胀一个XML布局,并使用它来代替单个编辑文本 – 2012-07-19 14:00:10