2013-09-27 3 views
0

Я хочу динамически создавать EditTextFields в зависимости от условия. Условие заключается в том, что если я начну печатать на первом EditTextField, он создаст еще один EditTextField внизу и создаст третий EditTextField, когда я начну печатать на втором. Аналогично, я хочу удалить нижний текст, если в верхнем EditTextField нет текста. Благодарю.Добавление полей EditText при просмотре при вводе текста EditText

+2

Вы только собираетесь иметь 3 EditText поля? Если это так, я бы создавал их в представлении и показывал/скрывал, если текст находится в другом поле editText. У вас есть код? Что вы пробовали? – jasonflaherty

+0

Я согласен с тем, что метод show/hide, вероятно, самый простой, если у вас есть конкретное количество полей max, известных перед рукой. – nhgrif

+0

Нет трех полей editText. Динамически мы должны добавить любое количество полей editText. – user2760685

ответ

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, чтобы вы понимали внутренние методы. Вам придется играть с условными выражениями, но то, что вы делаете, это прослушивание изменения количества введенных символов, а затем создание рекурсивного вызова для создания дополнительного представления, когда символы добавляются в каждое текстовое представление. Я использую логический флаг, чтобы показать, когда было создано представление, поэтому мы не добавляем его каждый раз, когда символ изменяется. Я перешел за пределы метода 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

Смежные вопросы