我想根据条件动态创建EditTextFields。条件是,如果我在第一个EditTextField上开始输入,它将在底部创建一个EditTextField,并在我开始在第二个上键入时创建第三个EditTextField。同样,如果EditTextField上部没有文本,我想删除底部文本。感谢。
答案 0 :(得分:2)
使用父视图,就像您知道可以添加内容灵活的ScrollView
一样。然后使用TextWatcher
a / k / a a 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
是否跨越另一个的状态。要删除,您只需添加一个删除条件,该条件将从线性布局中删除视图。
答案 1 :(得分: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
}
问题可能有所帮助:https://stackoverflow.com/a/6792359/350421
EditText toAdd = new EditText(this);
list.add(toAdd);
答案 2 :(得分:0)
用户 TextWatcher 使用TextWatcher实现您的Activity并覆盖方法
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}