• Android EditText 获得输入焦点 以及requestfocus()失效的问题


     最近做公司项目的时候,经常会遇到一个问题,就是我为某个控件如EditText设置requestfocus()的时候不管用,比如说登陆的时候,我判断下用户输入的密码,如果正确就登陆,错误就提示密码错误,并且输入框获取焦点,但是实际中确不起作用

    package com.example.hfs.requestfocusdemo;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
    
        private EditText mUserName,mPassWord;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initView();
    
        }
    
        private void initView() {
            mUserName= (EditText) this.findViewById(R.id.et_username);
            mPassWord= (EditText) this.findViewById(R.id.et_password);
    
            mPassWord.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
            if (!"123456".equals(mPassWord.getText().toString())){
                Toast.makeText(this,"密码错误,请重新输入",Toast.LENGTH_SHORT).show();
                mPassWord.requestFocus();
            }else{
                startActivity(new Intent(this,MainActivity.class));
                Toast.makeText(this,"登陆成功",Toast.LENGTH_SHORT).show();
                finish();
            }
        }
    }
    

      

    原因

    查资料分析了一下,可能是以下问题: 
    Android加载刷新UI的时候,是从左到右,从上到下的顺序,正在加载的过程中,如果此时requestFocus(),的话,有可能此时还没把整个界面刷新好,导致requestFocus无效。

    解决办法

    找到原因后就有解决办法了,给他个延迟时间:

    mPassWord.postDelayed(new Runnable() {  
      @Override  
      public void run() {  
        mPassWord.requestFocus();  
      }  
    }, 500);  
    

      这样就解决了这个问题了

  • 相关阅读:
    冒泡排序
    python isinstance 函数
    2.x与3.x差异、条件语句、数据类型、其他
    区间结构
    配置文件监听器
    Enumerable扩展方法
    EsayUI + MVC + ADO.NET(项目架构)
    vue.js 官网及组件网站记录
    vue.js 二维码生成组件
    分享一些学习资料-大量PDF电子书
  • 原文地址:https://www.cnblogs.com/pangguoming/p/5788131.html
Copyright © 2020-2023  润新知