我正在创建一个应用程序,我希望用户可以在运行时输入IP地址。 其中我设计了4个编辑文本,用户可以在其中输入IP地址。我为它创建了XML。 现在我创建了一个自定义类,它扩展了TextWatcher,为EditText设置了addTextChangedListener。
ipSlotFirst=(EditText)ipSettings.findViewById(R.id.ip_slot1);
ipSlotFirst.setFilters(FilterArray);
CustomOnTextChangeListener slot1=new CustomOnTextChangeListener(ipSlotFirst);
ipSlotFirst.addTextChangedListener(slot1);
ipSlotSecond=(EditText)ipSettings.findViewById(R.id.ip_slot2);
ipSlotSecond.setFilters(FilterArray);
CustomOnTextChangeListener slot2=new CustomOnTextChangeListener(ipSlotSecond);
ipSlotSecond.addTextChangedListener(slot2);
ipSlotThird=(EditText)ipSettings.findViewById(R.id.ip_slot3);
ipSlotThird.setFilters(FilterArray);
CustomOnTextChangeListener slot3=new CustomOnTextChangeListener(ipSlotThird);
ipSlotThird.addTextChangedListener(slot3);
ipSlotFourth=(EditText)ipSettings.findViewById(R.id.ip_slot4);
ipSlotFourth.setFilters(FilterArray);
CustomOnTextChangeListener slot4=new CustomOnTextChangeListener(ipSlotFourth);
ipSlotFourth.addTextChangedListener(slot4);
现在我希望当用户在一个EditText中输入三位数时,它将自动切换到下一个编辑文本,当用户删除editText的内容并在编辑文本的内容变空时将焦点转移到上一个编辑文本。我使用customOnTextChangeListener类完成了它。
class CustomOnTextChangeListener implements TextWatcher{
/** The m focused view. */
EditText mFocusedView;
/**
* Instantiates a new custom on text change listener.
*
* @param pFocusedView the focused view
*/
public CustomOnTextChangeListener(EditText pFocusedView){
mFocusedView = pFocusedView;
}
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
if(mFocusedView.equals(ipSlotFirst)){
if(s.length()>=3){
ipSlotSecond.requestFocus();
}
}else if(mFocusedView.equals(ipSlotSecond)){
if(s.length()>=3){
ipSlotThird.requestFocus();
}else if(s.length()==0){
ipSlotFirst.requestFocus();
}
}
else if(mFocusedView.equals(ipSlotThird)){
if(s.length()>=3){
ipSlotFourth.requestFocus();
}else if(s.length()==0){
ipSlotSecond.requestFocus();
}
}else if(mFocusedView.equals(ipSlotFourth)){
if(s.length()>=3){
portNumber.requestFocus();
}else if(s.length()==0){
ipSlotThird.requestFocus();
}
}
}
}
一切都很好。但是当我在第一个编辑文本中输入这样的192时我遇到问题然后它自动切换到第二个编辑文本然后我输入10然后单击第三个编辑文本然后单击一个数字然后第一次编辑文本没有采取输入。
请在这方面提供帮助。
最好的问候
Deepak Goel
答案 0 :(得分:0)
if(mFocusedView.equals(ipSlotFirst)){
if(s.length()>3){
ipSlotSecond.requestFocus();
}
添加以上内容而不是
if(mFocusedView.equals(ipSlotFirst)){
if(s.length()>=3){
ipSlotSecond.requestFocus();
}