按钮不能正常工作?

时间:2013-12-10 08:00:19

标签: android android-button

我正在为我的应用构建一个登录页面。我有两个EditText字段和一个Button。当应用程序启动时,第一次点击按钮没有响应,logcate也没有显示任何响应,但第二次点击时,它可以正常工作。我不知道发生了什么。请帮帮我。

  

activity_login.xml

<Button
 android:id="@+id/buttonLogin"
 style="@style/Button1"

 android:onClick="onLoginClick"
 android:text="continue"
 />
  

LoginActivity.java

  buttonLogin= (Button) findViewById(R.id.buttonLogin);
    buttonLogin.setFocusable(true);
    buttonLogin.setFocusableInTouchMode(true);
    buttonLogin.requestFocus();
    buttonLogin.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            hideSoftKeyboard(LoginActivity.this, v);
            Log.d("helo", "heoolll");
            String username = mUserEditText.getText().toString();
            String password = mPassEditText.getText().toString();
            String location = mLocationData.get(mLocationSpinner.getSelectedItemPosition()).toLowerCase();
            if(username.isEmpty()||password.isEmpty()){
                //CreatorMessenger.getInstance().showMessage(this,"Error!!","You need to enter username and password both to continue!!");
            popbox();
                return;
            }
            /*buttonLogin.requestFocus();
            buttonLogin.setFocusableInTouchMode(true);*/
            User user;
            user = new User(username);
            user.setLocation(location);
            AppManager.getInstance().setLoggedInUser(user);

            APICaller.getInstance().login(username, password, location);

        }
    });
}

5 个答案:

答案 0 :(得分:1)

从xml和你的活动集onClicklistener中删除android:onClick =“onLoginClick”。

Button login = (Button)findViewById(R.id.buttonLogin);
login.setOnClickListener(new OnClickListener......)

答案 1 :(得分:1)

是的我得到了答案,经过大量的RND后,我得到了解决方案,我只需要实现setOnFocusChangeListener()。所以我在这里提出解决方案。

  

ActivityLogin.java

 buttonLogin= (Button) findViewById(R.id.buttonLogin);
    buttonLogin.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("hello", "hellow");
            String username = mUserEditText.getText().toString();
            String password = mPassEditText.getText().toString();
            String location = mLocationData.get(mLocationSpinner.getSelectedItemPosition()).toLowerCase();
            if(username.isEmpty()||password.isEmpty()){
            popbox();
                return;
            }
            User user;
            user = new User(username);
            user.setLocation(location);
            AppManager.getInstance().setLoggedInUser(user);
            APICaller.getInstance().login(username, password, location);
        }
    });
    buttonLogin.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            v.performClick();
        }
    }
});
}
  

activity_login.xml

  <Button
        android:id="@+id/buttonLogin"
        style="@style/Button1"

        android:text="continue"
         />

答案 2 :(得分:1)

设置此 -

android:focusableInTouchMode="true"

到此 -

android:focusableInTouchMode="false"

按钮。

说明 - 如果您将按钮设为可对焦,则首次单击时焦点将传递给按钮,然后在第二次触摸时传递单击。 EditText是一个可聚焦的视图,它首先获得焦点,因此其他视图必须首先从EditText重新获得焦点,除非它们不需要焦点工作,就像按钮一样。如果你只需要OnClick功能,那么你不需要焦点,所以你可以再多一次点击。

PS:虽然它不应该要求,但将android:focusable设置为false也会有所帮助,如果第一个不起作用。

答案 3 :(得分:0)

是否有任何异常?还尝试使用用户A和密码“a”登录并按下按钮,然后尝试使用用户B和密码“b”登录,看看是否有效。也许setLoggedInUser或登录方法需要很长时间,这就是为什么它第二次使用相同的用户名和密码

答案 4 :(得分:0)

第一个按钮获得焦点,第二个按钮触发登录方法。因此,解决方案是将焦点放在按钮上,问题就解决了。