我想根据条件动态创建 EditTextFields。条件是,如果我开始在第一个 EditTextField 上输入,它将在底部再创建一个 EditTextField,并在我开始在第二个 EditTextField 上输入时创建第三个 EditTextField。同样,如果上部 EditTextField 中没有文本,我想删除底部文本。谢谢。
3 回答
使用父视图,例如ScrollView
您知道可以向其中添加灵活内容的视图。然后使用 a TextWatcher
/k/aa text change listener。然后,您可以创建一个新的文本视图,将其添加到ScrollView
是否将文本输入到EditText
字段中。
为了简洁起见,我可能会创建一个自定义TextView
类来容纳此文本更改侦听器和复制检查。这是如何添加的示例TextView
//instance variable
private LinearLayout containerLayout;
private newTextViewCreated = false;
//initialize your conatinerLayout before you use it
//and create your first edit text field
public void onCreate(Bundle savedInstaceState){
containerLayout = (LinearLayout)findViewById(R.id.conatinerLinearLayout);
createEditText();
}
private void createEditText(){
EditText editText = new editText(this);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(count > 0 && !newTextViewCreated){
createEditText();
newTextViewCreated = true;
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
//TODO Auto-generated method stub
}
});
containerLayout.addView(editText);
}
我没有对此进行测试,我现在正在写它,但这就是我的想法。阅读TextWatcher如何工作的描述,以便了解内部方法。您将不得不使用条件句,但您正在做的是监听输入字符数的变化,然后在将字符添加到每个文本视图时进行递归调用以创建附加视图。我使用布尔标志来显示何时创建视图,因此我们不会在每次更改 char 时添加一个。根据您的评论,我移出了 createEditText 方法。如果您创建了自己的EditText
课程,您可以添加一个方法来设置/获取这是否TextView
已经跨越另一个的状态。
如果您知道所需的 editText 字段的总量或以编程方式添加它们,请在布局中显示/隐藏它们,如下所示:
EditText myET = new EditText(MyActivity.this);
myET.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
LayoutContentView.addView(myET);
然后检查:
if (myET.getText().toString().trim().equals(""))
{
//Don't Show
}else{
//SHOW
}
SO问题可能会有所帮助:https ://stackoverflow.com/a/6792359/350421
EditText toAdd = new EditText(this);
list.add(toAdd);
用户TextWatcher使用 TextWatcher 实现您的 Activity 并覆盖方法
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}