我的问题与这篇文章非常相似:Edittext jumps to next edittext after reaching the maximum edittext length
但是,无论我做什么,我都无法跳过下图所示的第三个edittext。我在第一个编辑文本中写入10,它会自动移动到第二个编辑文本,但是当我写12时,它不会移动到第三个编辑文本。我尝试了几件事,但无法处理。对于这个问题,我需要一个简单的解决方案,最多10-15个edittext。有人可以帮我了解语法吗?谢谢。
这是我的活动主要xml
<EditText
android:id="@+id/edittext1"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:textSize="20dp"
android:maxLength="2"
android:hint="1"
android:layout_weight="1"/>
<EditText
android:id="@+id/edittext2"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:textSize="20dp"
android:maxLength="2"
android:digits="0123456789 "
android:hint="2"
android:layout_weight="1"/>
<EditText
android:id="@+id/edittext3"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:textSize="20dp"
android:maxLength="2"
android:digits="0123456789 "
android:hint="3"
android:layout_weight="1"/>
这是我的主要活动
package com.example.serkan.justtry;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity implements TextWatcher {
EditText edt1;
EditText edt2;
EditText edt3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt1=(EditText)findViewById(R.id.edittext1);
edt2=(EditText)findViewById(R.id.edittext2);
edt3=(EditText)findViewById(R.id.edittext3);
edt1.addTextChangedListener(this);
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if (edt1.length() == 2) {
edt2.requestFocus();
}
}
}
答案 0 :(得分:0)
您还需要将列表器设置为edt2
edt2.addTextChangedListener(this);
只需替换
@Override
public void afterTextChanged(Editable editable) {
if(edt1.getText().hashCode() == editable.hashCode()){
if (edt1.length() == 2) {
edt2.requestFocus();
}
}
else if( edt2.getText().hashCode() == editable.hashCode()){
if (edt2.length() == 2) {
edt3.requestFocus();
}
}
}
答案 1 :(得分:0)
您没有将TextChangedListener
设置为其他2个EditText。
收听者不知道何时必须将焦点从edt2
更改为edt3
。
将侦听器添加到edt2
上的onCreate
。
edt2.addTextChangedListener(this);
并更新afterTextChanged
@Override
public void afterTextChanged(Editable editable) {
if (editable == edt1.getEditableText()) {
if (edt1.length() == 2) {
edt2.requestFocus();
}
} else if (editable == edt2.getEditableText()) {
if (edt2.length() == 2) {
edt3.requestFocus();
}
}
}
我没有测试。 :)
答案 2 :(得分:0)
将此添加为“活动”中的内部类:
private class MyTextWatcher implements TextWatcher {
private final int maxLength;
private final EditText next;
MyTextWatcher(int maxLength, int nextId) {
this.maxLength = maxLength;
this.next = (nextId != -1) ? findViewById(nextId) : null;
}
@Override
public void afterTextChanged(Editable editable) {
if (editable.length() >= maxLength && next != null) {
next.requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
// do nothing
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
// do nothing
}
}
然后为每个EditText进行设置,如下所示:
edittext1.addTextChangedListener(new MyTextWatcher(2, edittext1.getNextFocusDownId()));
edittext2.addTextChangedListener(new MyTextWatcher(2, edittext2.getNextFocusDownId()));
edittext3.addTextChangedListener(new MyTextWatcher(2, edittext3.getNextFocusDownId()));
这取决于在布局中设置nextFocusDown
属性:
<EditText
android:id="@+id/edittext1"
android:nextFocusDown="@+id/edittext2"
.../>
答案 3 :(得分:0)
XML文件中没有问题。 只需尝试在MainActivity.java中遵循以下代码
将TextChangedListener添加到第二个edittext
edt2.addTextChangedListener(this);
在textwatcher的onTextChanged方法中插入以下代码
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if(edt1.hasFocus())
{
if(edt1.getText().toString().length()==2) //size as per your requirement
{
edt2.requestFocus();
}
}
if(edt2.hasFocus())
{
if(edt2.getText().toString().length()==2) //size as per your requirement
{
edt3.requestFocus();
}
}
}
@Override
public void afterTextChanged(Editable editable) {
}
我希望这个答案能解决您的问题:)