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

  这样就解决了这个问题了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏学海无涯

Android开发之Fragment回退栈

在Android开发之Fragment动态使用一文中,说到replace方法切换Fragment,会造成Fragment不断销毁、创建,但是有没有办法实现像Ac...

2924
来自专栏增长技术

BaseRecyclerViewAdapterHelper

#如何使用它? 先在 build.gradle 的 repositories 添加:

3161
来自专栏james大数据架构

Android Fragment完全解析

我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再赘述。 但是Acti...

2079
来自专栏Android干货

Volley网络连接

2927
来自专栏Android知识点总结

1-AVI--Fragment基础使用

1192
来自专栏Android知识点总结

2-VVI-材料设计之TabLayout下标签

885
来自专栏佳爷的后花媛

Fragment横竖屏

第一步,创建两个Fragment。 Fragment1是横屏时的Fragment Fragment2是竖屏时的fragment。 代码如下:

1741
来自专栏向治洪

android的RadioGroup讲解

这个主要是如何替换fragment的demo。效果图如下(下面的tabhost和上面的bar不属于这次的内容,这个是我做的一个应用程序框架的一部分,有需要的或者...

21710
来自专栏Android干货

安卓开发_浅谈Notification(通知栏)

3678
来自专栏沃趣科技

Oracle 12c系列(7)| Non-CDB转换为PDB

当我们需要将Non-CDB数据库类型更改为PDB数据库类型时,可以使用Cloning的方式将其复制到现有的CDB中,但是该方法需要将Non-CDB中的数据文件复...

3829

扫码关注云+社区