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

  這樣就解決了這個問題了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM