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 Material Design系列之Navigation Drawer

从今天开始,我们讲一个关于Material Design风格控件系列的文章。个人认为Material Design风格还是非常漂亮和好看的。关于Material...

1905
来自专栏kevindroid

Android 点击屏幕其他位置隐藏Floating Action Button

2146
来自专栏菩提树下的杨过

c#如何启动/干掉/查找 进程

查找/列出进程很容易,但干掉进程得借助系统命令ntsd.exe,详细用法见下面的代码 :  using System; using System.Diagnos...

18810
来自专栏无所事事者爱嘲笑

react-native 打开设置界面

1343
来自专栏张善友的专栏

HTML生成PDF(c#)

Calling wkhtmltopdf to generate PDF from HTML 老外最多人加分的那篇做法,使用wkhtmtopdf(GPL协议)可以...

18510
来自专栏cnblogs

通用网页调用本地应用程序方案(windows平台)

一、更新注册表 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\receiveOutOfArg]...

1819
来自专栏图像识别与深度学习

《Android》Lesson04-Menu

1887
来自专栏CodingBlock

Android开发必知--自定义Toast提示

  开发过Android的童鞋都会遇到一个问题,就是在打印Toast提示时,如果短时间内触发多个提示,就会造成Toast不停的重复出现,直到被触发的Toast全...

2175
来自专栏施炯的IoT开发专栏

Visual Studio 2013 Update 2 RTM 发布

今天,微软再Visual Studio Blog发布了开放 Visual Studio 2013 Update 2 RTM 下载的文章。 原来安装RC版本的同志...

16710
来自专栏技术博客

ExtJs六(ExtJs Mvc首页展示)

要区分登录前和登录后,判断Request的IsAuthenticated方法就可以。因为要通过服务器段代码执行不同的脚本,因而要将Loder这些公共代码抽出来独...

713

扫描关注云+社区