【问题标题】:Requesting focus to a EditText after another EditText has been touched?在触摸另一个 EditText 后请求对 EditText 的焦点?
【发布时间】:2019-07-08 06:28:07
【问题描述】:

我有 2 个EditTextmyEditText1myEditText2
我需要触摸时myEditText1
1. 做一些生意[这里没有问题,申请了所需的业务]
2. 然后请求关注myEditText2 [不走运? ]

final EditText myEditText1 = (EditText) findViewById(R.id.myEditText1);
final EditText myEditText2 = (EditText) findViewById(R.id.myEditText2);

// ...

myEditText1.setOnTouchListener(new View.OnTouchListener()
{
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        // My business when myEditText1 touched [ OK ]
        // ...

        // TODO
        // Need to request focus to another EditText myEditText2 ?

        return false;
    }
});

我尝试了一些解决方案,例如以下试验
但是没有运气,仍然专注于myEditText1

myEditText2.requestFocus();

相关问题
EditText request focus
Change Focus to EditText Android

【问题讨论】:

  • 也尝试从编辑文本中移除焦点
  • 你也可以试试这个myEditText1.setImeOptions(EditorInfo.IME_ACTION_NEXT);

标签: java android android-edittext ontouchlistener


【解决方案1】:

您可以像这样在编辑文本上设置OnClickListener

this.editText1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //your code
                editText2.requestFocus();
            }
});

请注意特殊情况
当 EditText 没有焦点时不会调用 onClick()
您可以在以下问题线程中找到此案例的详细信息
onClick event is not triggering | Android

【讨论】:

    【解决方案2】:

    我建议使用 TextWatcher,而不是使用条件来了解您的业务何时完成

    试试这个:

    myEditText1.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
            }
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                if(myEditText1.getText().length() > 3){
                    myEditText2.requestFocus();
                }
            }
         });
    

    【讨论】:

      【解决方案3】:

      这可能是因为键盘。你可以试试

      myEditText2.requestFocus();
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
      imm.showSoftInput(myEditText2, InputMethodManager.SHOW_IMPLICIT);
      

      这对我有用

      【讨论】:

        【解决方案4】:

        你可以试试这个

        public void requestFocus(View view) {
            if (view.requestFocus()) {
                getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            }
        }
        

        并使用like,

        requestFocus(myEditText2);
        

        【讨论】:

          猜你喜欢
          • 2011-12-26
          • 1970-01-01
          • 1970-01-01
          • 2013-07-09
          • 2015-01-10
          • 2014-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多