2013-10-18 54 views
0

我有这个应用程序可以动态创建多个EditText。金额取决于用户输入。我试图让焦点在输入两个字符后更改为下一个编辑文本。我有这个至今:在多个edittext字段上实现TextWatcher

for(EditText editText : editTextList) { 

     editText.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 

       if(s.toString().length() == 2) { 
        //code to change focus to next edit text goes here 
       } 

      } 
     }); 
    } 

的第一个问题是,这可能创造TextWatcher的许多情况下,如果用户输入大量(平均在这种情况下很可能是100-600的EditText字段)。

第二个问题是我将如何去改变afterTextChanged方法中的焦点,因为我想将焦点改变为离当前在循环内表示的EditText的下一个EditText。

我不应该担心多个TextWatcher对象的潜在性能问题吗?我是否应该放弃整个实施并专注于别处?任何建议将不胜感激。

+0

对于多实例问题在循环外部创建一个textwatcher对象并将其设置为循环中的所有编辑文本 – SKT

回答

0

正如你可能有很多在运行时 EditTexts的我建议你使用最大长度的EditText的属性,这样你将限制用户只需输入2个字符。

这样

EditText editText = new EditText(this); 
int maxLength = 2;  
editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)}); 

现在在键盘上添加一个按钮这样

yourEditText.setImeOptions(EditorInfo.IME_ACTION_NEXT); 

这是下一个按钮的默认行为将焦点更改这需要输入紧跟其后的观点处于相同的父级布局。

+0

我已经在使用editText,setMaxEms(2)将字符输入限制为2。的权利,但这是因为他们被创造的方式。我的目标是让用户输入12个连续的数字,然后填写6个edittext字段。这只是一个方便的问题,使用户不得不填充许多字段。 –

+0

好吧,我已经知道你确实需要什么。所以在循环中定义点击监听器是一个糟糕的主意,你不应该以这种方式实现点击监听器。文本更改侦听器由3个重写的方法组成,因此每次您的侦听器定义* 3个方法都会自动调用,这不是一个好方法。 –

相关问题