安卓:警报对话框崩溃



我有一个警报对话框,单击列表视图项时会弹出。"警报"对话框具有包含两个编辑文本和一个文本视图的自定义布局。但是,在单击对话框上的"确定"按钮调用 EditText.getText(( 时,应用程序会崩溃并显示 java.lang.NullPointerException。请帮我调试它。

列表视图上的点击侦听器代码:

lv.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> listView, View view, int position, long id) {
            Cursor cursor = (Cursor) listView.getItemAtPosition(position);
            String cn = cursor.getString(cursor.getColumnIndex("CourseName"));
            //Toast.makeText(getApplicationContext(), "Selected: "+cn, Toast.LENGTH_SHORT).show();
            LayoutInflater lf = LayoutInflater.from(List_of_Courses.this);
            final View DialogView = lf.inflate(R.layout.dialog, null);
            final EditText input1 = (EditText) findViewById(R.id.attendanceet);
            final EditText input2 = (EditText) findViewById(R.id.totalclasseset);
            final AlertDialog.Builder alert = new AlertDialog.Builder(List_of_Courses.this);
            alert.setTitle(cn).setView(DialogView).setPositiveButton("OK", 
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int whichbutton) {
                            Log.v("Test","We're checking");
                            input1.getText();
                            input2.getText();
                            Log.v("Test","We're good");
                            Log.v("Dialog", input1.getText().toString());
                            Log.v("Dialog", input2.getText().toString());
                        }
                    }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int whichbutton) {
                            //User clicked cancel so doing nothing.
                            Log.v("CancelDialog", "User clicked Calcel");
                        }
                    });
            alert.show();
        }
    });

对话框.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
    android:orientation="horizontal"
    android:id="@+id/DialogLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:paddingLeft="25sp" 
    android:paddingRight="25sp" >
    <EditText
        android:id="@+id/attendanceet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:layout_weight="1"
        android:inputType="number" >
    </EditText>

    <LinearLayout
        android:orientation="vertical"
        android:id="@+id/tvLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:paddingTop="6sp" >

        <TextView 
            android:id="@+id/outof"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="/"
            android:textSize="20sp"
            android:paddingLeft="15sp"
            android:paddingRight="15sp"
            android:textColor="#FFFFFF" >
        </TextView>

    </LinearLayout>

    <EditText
        android:id="@+id/totalclasseset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:layout_weight="1"
        android:inputType="number" >
    </EditText>
</LinearLayout>
</RelativeLayout>

您应该使用 dialog 对象将输入 1 初始化为输入 2。

final View DialogView = lf.inflate(R.layout.dialog, null);
final EditText input1 = (EditText) DialogView.findViewById(R.id.attendanceet);

您可以找到设置为活动的当前视图层次结构的 ViewById。在您的情况下,您膨胀了一个对话框,并且您的当前视图是列表视图项目单击上的对话框。因此,您应该使用 dialog 对象来初始化视图。

您可以删除以下各项的最终修改器

 AlertDialog.Builder alert = new AlertDialog.Builder(List_of_Courses.this);   
final EditText input1 = (EditText) findViewById(R.id.attendanceet);
final EditText input2 = (EditText) findViewById(R.id.totalclasseset);

应该是

final EditText input1 = (EditText) DialogView.findViewById(R.id.attendanceet);
final EditText input2 = (EditText) DialogView.findViewById(R.id.totalclasseset);

在调用该方法之前,必须创建一个AlertDialog show()。并在创建的AlertDialog而不是AlertDialogBuilder上调用show()方法。

// create alert dialog              
AlertDialog alertDialog = alert.create();

查看此示例以供参考。

最新更新