0

我想根据条件动态创建 EditTextFields。条件是,如果我开始在第一个 EditTextField 上输入,它将在底部再创建一个 EditTextField,并在我开始在第二个 EditTextField 上输入时创建第三个 EditTextField。同样,如果上部 EditTextField 中没有文本,我想删除底部文本。谢谢。

4

3 回答 3

2

使用父视图,例如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已经跨越另一个的状态。

于 2013-09-27T15:21:22.430 回答
0

如果您知道所需的 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);
于 2013-09-27T15:23:35.277 回答
0

用户TextWatcher使用 TextWatcher 实现您的 Activity 并覆盖方法

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
于 2013-09-27T15:26:45.317 回答