我是Android开发的新手,只是在imeActionId
上使用了EditText
属性。为什么我们要检查onEditorActionListener
中的id是否等于提供给imeActionId
的值?
我的代码如下:
public class RegisterActivity extends AppCompatActivity {
// Constants
public static final String CHAT_PREFS = "ChatPrefs";
public static final String DISPLAY_NAME_KEY = "username";
// TODO: Add member variables here:
// UI references.
private AutoCompleteTextView mEmailView;
private AutoCompleteTextView mUsernameView;
private EditText mPasswordView;
private EditText mConfirmPasswordView;
// Firebase instance variables
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
mEmailView = (AutoCompleteTextView) findViewById(R.id.register_email);
mPasswordView = (EditText) findViewById(R.id.register_password);
mConfirmPasswordView = (EditText) findViewById(R.id.register_confirm_password);
mUsernameView = (AutoCompleteTextView) findViewById(R.id.register_username);
// Keyboard sign in action
mConfirmPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {enter code h`enter code here`ere
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.integer.register_form_finished || id == EditorInfo.IME_NULL) {
attemptRegistration();
return true;
}
return false;
}
});
// TODO: Get hold of an instance of FirebaseAuth
mAuth = FirebaseAuth.getInstance();
}
// Executed when Sign Up button is pressed.
public void signUp(View v) {
attemptRegistration();
}
private void attemptRegistration() {
// Reset errors displayed in the form.
mEmailView.setError(null);
mPasswordView.setError(null);
// Store values at the time of the login attempt.
String email = mEmailView.getText().toString();
String password = mPasswordView.getText().toString();
boolean cancel = false;
View focusView = null;
// Check for a valid password, if the user entered one.
if (TextUtils.isEmpty(password) || !isPasswordValid(password)) {
mPasswordView.setError(getString(R.string.error_invalid_password));
focusView = mPasswordView;
cancel = true;
}
// Check for a valid email address.
if (TextUtils.isEmpty(email)) {
mEmailView.setError(getString(R.string.error_field_required));
focusView = mEmailView;
cancel = true;
} else if (!isEmailValid(email)) {
mEmailView.setError(getString(R.string.error_invalid_email));
focusView = mEmailView;
cancel = true;
}
if (cancel) {
// There was an error; don't attempt login and focus the first
// form field with an error.
focusView.requestFocus();
} else {
// TODO: Call create FirebaseUser() here
createFirebaseUser();
}
}
private boolean isEmailValid(String email) {
// You can add more checking logic here.
return email.contains("@");
}
private boolean isPasswordValid(String password) {
//TODO: Add own logic to check for a valid password (minimum 6 characters)
String confirmPassword = mConfirmPasswordView.getText().toString();
return confirmPassword.equals(password) && password.length() > 5 ;
}
// TODO: Create a Firebase user
private void createFirebaseUser(){
String email = mEmailView.getText().toString();
String password = mPasswordView.getText().toString();
mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d("FlashChat", "create User onComplete: " + task.isSuccessful());
if (!task.isSuccessful()){
Log.d("Flaschat","user creation failed");
showErrorDialog("Registration attempt failed");
}else {
saveDisplayName();
Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
finish();
startActivity(intent);
}
}
});
}
// TODO: Save the display name to Shared Preferences
private void saveDisplayName(){
String displayName = mUsernameView.getText().toString();
SharedPreferences prefs = getSharedPreferences(CHAT_PREFS,0);
prefs.edit().putString(DISPLAY_NAME_KEY,displayName).apply();
}
// TODO: Create an alert dialog to show in case registration failed
private void showErrorDialog(String message){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Oops");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok,null);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.show();
}
}
XML代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@drawable/background_login_min"
tools:context="com.shubhamkathuria.flashchatnewfirebase.RegisterActivity"
android:gravity="top">
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/white"
>
<AutoCompleteTextView
android:id="@+id/register_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:hint="@string/prompt_username"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:inputType="textNoSuggestions"
android:imeOptions="actionNext"
android:maxLines="1"
android:textIsSelectable="false"
android:textStyle="bold"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/white"
>
<AutoCompleteTextView
android:id="@+id/register_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_email"
android:textColor="@color/white"
android:textSize="25sp"
android:imeOptions="actionNext"
android:textColorHint="@color/white"
android:inputType="textEmailAddress"
android:maxLines="1"
android:textIsSelectable="false"
android:textStyle="bold"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/white"
>
<EditText
android:id="@+id/register_password"
android:textSize="25sp"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:layout_width="match_parent"
android:imeOptions="actionNext"
android:layout_height="wrap_content"
android:hint="@string/prompt_password"
android:inputType="textPassword"
android:maxLines="1"
android:textStyle="bold"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/white"
>
<EditText
android:id="@+id/register_confirm_password"
android:textColor="@color/white"
android:textSize="25sp"
android:textColorHint="@color/white"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_password_again"
android:imeActionId="@integer/register_form_finished"
android:imeActionLabel="@string/action_sign_up"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:textStyle="bold"/>
</android.support.design.widget.TextInputLayout>
<Button
android:id="@+id/register_sign_up_button"
style="?android:textAppearanceMedium"
android:background="@color/white"
android:textColor="@color/green"
android:onClick="signUp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/action_sign_up"
android:textStyle="bold"/>
</LinearLayout>
答案 0 :(得分:0)
在您的代码中,这只是为了确保当用户位于 register_confirm_password 编辑文本中并按下键盘的“完成”按钮时,它应该调用 attemptRegistration()方法。