我正在为我的应用构建一个登录页面。我有两个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);
}
});
}
答案 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)
第一个按钮获得焦点,第二个按钮触发登录方法。因此,解决方案是将焦点放在按钮上,问题就解决了。