2013-09-27 56 views
0

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

+2

你只会有3个EDITTEXT领域?如果是这样,我会在视图中创建它们,并在文本位于其他editText字段时显示/隐藏。你有一些代码吗?你有什么尝试? – jasonflaherty

+0

我同意显示/隐藏方法可能是最简单的,如果你有一个具体数量的最大的领域之前已知的领域。 – nhgrif

+0

否3 editText字段。动态地,我们应该添加任意数量的editText字段。 – user2760685

回答

2

使用父视图,如ScrollView,您知道您可以添加灵活的内容。然后使用TextWatcher a/k/a a text change listener。然后,您可以创建一个新的文本视图,如果将文本输入EditText字段中,您将添加到ScrollView

为了整洁,我可能会创建一个自定义的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如何工作的说明,以便了解内部方法。你将不得不使用条件语句,但是你在做什么是监听输入字符数量的变化,然后在向每个文本视图添加字符时进行递归调用以创建额外的视图。我使用布尔标志来显示视图何时被创建,所以每次改变字符时我们都不会添加一个。根据您的评论,我移出了createEditText方法。如果你自己创建了EditText课程,你可以添加一个方法来设置/获取这个TextView是否跨越另一个的状态。要删除你只需添加一个删除条件,将删除线性布局的视图。

+0

但是如何动态添加和删除EditText字段。 – user2760685

+0

您将使用'TextWatcher'。它会告诉你一切你需要知道的EditText中的内容。我将在上面添加一个示例。 – Rarw

+0

在内部类中使用非最终变量是不可能的。 – user2760685

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); 
+0

号动态地,我们应该添加任意数量的editText字段。 – user2760685

+0

这将有助于:http://stackoverflow.com/a/6792359/350421 – jasonflaherty

0

用户TextWatcher 与TextWatcher实现您的活动,并重写方法

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) {} 
+0

是的,我试过在onTextChanged。但是如何动态添加和删除EditText字段。 – user2760685