【问题标题】:OnKey Event For One EditText Is Working For Two EditTexts, How To Fix This?一个 EditText 的 OnKey 事件适用于两个 EditText,如何解决这个问题?
【发布时间】:2021-08-03 01:41:11
【问题描述】:

这里是初学者,我正在寻找一个简单的应用程序,其中有 4 个连续的 EditText,一旦第一个 EditText 完成并且用户按下“输入”,焦点就会自动转到下一个 EditText 和第一个 EditText 消失了。 我使用了“onKey 侦听器”。但是,每当为第一个 EditText 按下 enter 键时,第一个和第二个 EditText 字段都会消失。 这是代码

public class MainActivity extends AppCompatActivity {


protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final EditText ko = findViewById(R.id.one);
    final EditText ma = findViewById(R.id.two);
    final EditText ko1 = findViewById(R.id.three);
    final EditText xa = findViewById(R.id.four);
    final TextView te = findViewById(R.id.ko);
    ko.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int i, KeyEvent keyEvent) {
            if(i == KeyEvent.KEYCODE_ENTER) {
                ko.setVisibility(View.INVISIBLE);
                ma.requestFocus();
            }
            return false;
        }
    });
    ma.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int i, KeyEvent k) {
            if(i == KeyEvent.KEYCODE_ENTER) {
                ma.setVisibility(View.INVISIBLE);
                ko1.requestFocus();
            }
            return false;
        }
    });
    ko1.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int i, KeyEvent t) {
            if(i == KeyEvent.KEYCODE_ENTER) {
                ko1.setVisibility(View.INVISIBLE);
                xa.requestFocus();
            }
            return false;
        }
    });


}
public void onClick(View v){
    EditText ko = findViewById(R.id.one);
    EditText ma = findViewById(R.id.two);
    EditText ko1 = findViewById(R.id.three);
    EditText xa = findViewById(R.id.four);
    String t = ko.getText().toString();
    String u = ma.getText().toString();
    String x = ko1.getText().toString();
    String w = xa.getText().toString();
    String total = t +" "+ u +" "+x + " " +w;
    Toast.makeText(this, total,Toast.LENGTH_LONG).show();

}

}

【问题讨论】:

  • 你应该在请求 foucs() 之后返回 true

标签: android android-studio android-edittext


【解决方案1】:

如果返回 false,事件将继续在容器链中冒泡

如果监听器已经消费了事件,则返回 True,否则返回 false。


    ko.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                if(i == KeyEvent.KEYCODE_ENTER) {
                    ko.setVisibility(View.INVISIBLE);
                    ma.requestFocus();
                }
                return true;//change this line and all its occurances
            }
        });

【讨论】:

    【解决方案2】:

    请求焦点后返回真。参考View.OnKeyListener

    如果监听器已经消费了事件则为真,否则为假。

     public boolean onKey(View view, int i, KeyEvent keyEvent) {
                if(i == KeyEvent.KEYCODE_ENTER) {
                    ko.setVisibility(View.INVISIBLE);
                    ma.requestFocus();
                    return true; // this will consume the Enter event
                }
                return false;
            }
    

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 2019-01-25
      • 2015-11-10
      • 2014-10-07
      • 1970-01-01
      相关资源
      最近更新 更多