Android開発における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を更新するときは、左から右にかけて、上から下までの順にローディングしていますが、このときrequest Focus()をローディングしたら、まだ画面全体を更新していない可能性があります。
解決策
原因が見つかったら解決方法があります。彼に遅延時間を与えます。

mPassWord.postDelayed(new Runnable() { 
  @Override 
  public void run() { 
    mPassWord.requestFocus(); 
  } 
}, 500); 
これでこの問題を解決しました。
PS:request Focus()が無効になった理由

setVisible(true); 
person.requestFocus(); 
つまりrequest Focusはset Visibleの後ろに置くべきです。
以上は小编が绍介したAndroid开発中のrequestfocusの无効な原因と解决方法です。皆さんに助けてほしいです。もし何かご质问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。