在自定义对话框Android中对小部件的空引用

时间:2016-11-17 11:32:02

标签: android nullpointerexception dialog

我正在尝试自定义对话框,

所以我做了布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <EditText
        android:id="@+id/dialog_newpassord"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="24dp"
        android:layout_marginLeft="24dp"
        android:layout_marginRight="24dp"
        android:layout_marginStart="24dp"
        android:layout_marginTop="24dp"
        android:ems="10"
        android:hint="@string/activity_login_field_password_hint"
        android:inputType="textPassword"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/dialog_title"/>

    <EditText
        android:id="@+id/dialog_newpassord2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="24dp"
        android:layout_marginLeft="24dp"
        android:layout_marginRight="24dp"
        android:layout_marginStart="24dp"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:hint="@string/dialog_newPassword"
        android:inputType="textPassword"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/dialog_newpassord"/>

    <TextView
        android:id="@+id/dialog_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="24dp"
        android:layout_marginStart="24dp"
        android:layout_marginTop="24dp"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <Button
        android:id="@+id/dialog_button_ko"
        android:layout_width="wrap_content"
        android:layout_height="36dp"
        android:layout_marginBottom="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="16dp"
        android:text="@android:string/cancel"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/dialog_button_ok"
        app:layout_constraintTop_toBottomOf="@+id/dialog_newpassord2"/>

    <Button
        android:id="@+id/dialog_button_ok"
        android:layout_width="wrap_content"
        android:layout_height="36dp"
        android:layout_marginBottom="16dp"
        android:layout_marginEnd="24dp"
        android:layout_marginRight="24dp"
        android:layout_marginTop="16dp"
        android:text="@string/ok"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/dialog_newpassord2"/>

    <TextView
        android:id="@+id/dialog_alert"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:visibility="gone"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/dialog_newpassord2"/>
</android.support.constraint.ConstraintLayout>

然后在我的活动中:

private void newPasswordDialog(){
        Dialog dialog = new Dialog(ctx);
        dialog.setContentView(R.layout.dialog_login);
        dialog.setTitle("New password");

        final EditText password = (EditText) dialog.findViewById(R.id.dialog_newpassord);
        final EditText password2 = (EditText) dialog.findViewById(R.id.dialog_newpassord2);
        Button cancel = (Button) dialog.findViewById(R.id.dialog_button_ko);
        Button accept = (Button) dialog.findViewById(R.id.dialog_button_ok);

        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });
        accept.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(isEmptyEditText(password) || isEmptyEditText(password2))
                {
                    //Lanzar visibility y meter texto
                }
                else
                {
                    //comprobar que son iguales los passwords
                }
            }
        });

    }

但是当我启动应用程序并调用newPasswordDialog时,对窗口小部件的所有引用都设置为null,显然当到达cancel.onClic{..}时它会崩溃

如何避免此空引用?

0 个答案:

没有答案