【问题标题】:Edittext jumps to next edittexts after reaching the maximum edittext lengthEdittext 在达到最大edittext 长度后跳转到下一个edittexts
【发布时间】:2018-11-26 13:05:49
【问题描述】:

我的问题和这个帖子很相似:Edittext jumps to next edittext after reaching the maximum edittext length

但是,无论我尝试做什么,我都无法跳转第三个编辑文本,如下图所示。我将 10 写入第一个编辑文本,它会自动移动到第二个编辑文本,但是当我写 12 时,它不会移动到第三个编辑文本。我尝试了几件事,但无法处理。我需要一个简单的解决方案来解决这个问题,最多 10-15 个编辑文本。任何人都可以帮助我了解语法吗?谢谢。

这是我的活动主要 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();
    }
}
}

【问题讨论】:

    标签: java android android-edittext


    【解决方案1】:

    您还需要将侦听器设置为 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();
                }
            }
        }
    

    【讨论】:

    • 删除 else if and have only if 检查更新的答案
    【解决方案2】:

    将此作为内部类添加到您的 Activity 中:

    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】:

      XML 文件没有问题。 只需在 MainActivity.java 中尝试以下代码

      1. 将 TextChangedListener 添加到第二个编辑文本

        edt2.addTextChangedListener(this);

      2. 在 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) {
        
        }
        

      我希望这个答案能解决你的问题:)

      【讨论】:

        【解决方案4】:

        您没有将 TextChangedListener 设置为其他 2 个 EditText。 听者不知道何时必须将焦点从edt2 更改为edt3。

        将侦听器添加到您的onCreate 上的edt2。

        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();
                }
            }
        }
        

        我没有测试。 :)

        【讨论】:

          猜你喜欢
          • 2012-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-07
          • 2012-01-09
          • 2013-11-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多