Android requestfocus无效

时间:2015-04-22 09:51:19

标签: android android-edittext

我正在尝试使用相同的EDITTEXT控制器来获取密码和确认密码,这是我正在使用的代码。

public  class MainActivity extends Activity {

    protected Button SignupButton;
    protected EditText NameSignup,EmailSignup,PasswordSignup;
    String passwordInitial;
    int Inte = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



    //initialize
        SignupButton = (Button)findViewById(R.id.signupButtonSignup);
        NameSignup = (EditText)findViewById(R.id.nameSignup);
        EmailSignup = (EditText)findViewById(R.id.emailSignup);
        PasswordSignup = (EditText)findViewById(R.id.passwordSignup);

        PasswordSignup.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(!hasFocus) {
                    if (0 >= Inte){
                        //you require to put validations you want
                        passwordInitial = PasswordSignup.getText().toString();
                        PasswordSignup.setText(null);
                        PasswordSignup.setHint("Confirm Password");
                        PasswordSignup.requestFocus();
                        Inte++;

                    }else {
                        Inte--;
                        return;

                    }
                }

            }
        });

但我面临的问题是,当用户第一次输入密码并且edittext失去焦点时,焦点将回到密码字段,这就是我想要的,但问题是松开焦点我必须选择另一个场,然后当键盘弹出时我输入的是在EDITTEXT字段中,我有CHOOSEN松散焦点而不是密码字段。我可以做些什么来使这个功能尽可能顺利地发生。

编辑:更详细的解释

在正常的注册表单/活动中,您有一个/ s来双重确认您的密码。一种是你输入passwod,另一次是确认你输入了正确的密码,这是非常自我解释的。在我的应用程序中,我想将这两个只用于一个EDITTEXT控制器,这意味着一旦用户第一次输入密码并且松散焦点,我想将焦点带回同一个EDITTEXT控制器并要求他输入确认密码,所以一旦他这样做,当他在我的活动中按下注册按钮时,我将检查密码是否第一次输入并且第二次匹配并继续注册。希望这是足够清楚的(这是我不确定如何在第二次完成密码输入后如何放松焦点的部分)

1 个答案:

答案 0 :(得分:0)

试试这个并检查 “ 首先声明一个公共布尔值

boolean confirmvisible=false;

然后

PasswordSignup.setOnFocusChangeListener(new View.OnFocusChangeListener() {
           @Override
           public void onFocusChange(View v, boolean hasFocus) {
               if(!confirmvisible) {


                   confirmvisible=true;
                       //you require to put validations you want
                       passwordInitial = PasswordSignup.getText().toString();
                       PasswordSignup.setText("");
                       PasswordSignup.setHint("Confirm Password");
                       PasswordSignup.requestFocus();
                       Inte++;

                   }else {
                       Inte--;
                       if(passwordInitial.equalsIgnoreCase(PasswordSignup.getText().toString())){

                           System.out.println("password match");
                       }
                       else
                           System.out.println("password missmatch");
                       return;

                   }
               }

           }
       });