自定义AlerDialog

时间:2017-01-09 12:41:00

标签: android layout alertdialog android-alertdialog

任何人都知道为什么应用程序在点击“Dodaj”后崩溃了? 当我使用taskArray的默认值时,例如。 taskArray(新任务(“示例”,“示例”)一切正常。在下面的情况下,我的警告对话框崩溃了应用程序。

public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
final int id = item.getItemId();

final EditText input1 = (EditText) findViewById(R.id.tematZadania);
final EditText input2 = (EditText) findViewById(R.id.prioZadania);


if (id == R.id.menuItem) {
AlertDialog noweZadanie = new AlertDialog.Builder(MainActivity.this)
.setTitle("Dodaj nowe zadanie")
.setView(R.layout.pojedyncze_zadanie)
.setPositiveButton("Dodaj", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "ej", Toast.LENGTH_SHORT).show();
String item1 = String.valueOf(input1.getText());
String item2 = String.valueOf(input2.getText());
taskArray.add(new Task(item1, item2));
                                //input1.setText("");
                                //input2.setText("");
                                taskArrayAdapter.notifyDataSetChanged();
                            }
                        })
                        .setNegativeButton("Anuluj", null)
                        .create();
                noweZadanie.show();
        }
            if (id == R.id.menuItem2) {
                finish();
                return true;
            }

            return super.onOptionsItemSelected(item);
        }

XML.file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:text="Name"
        android:ems="10"
        android:id="@+id/tematZadania" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:text="Name"
        android:ems="10"
        android:id="@+id/prioZadania" />
</LinearLayout>

日志

I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@30e82b97 time:204086971
W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
I/ListPopupWindow: Could not find method setEpicenterBounds(Rect) on PopupWindow. Oh well.
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.piotr.todolist, PID: 2616
                  java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
                      at com.example.piotr.todolist.MainActivity$2.onClick(MainActivity.java:176)
                      at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:161)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:135)
                      at android.app.ActivityThread.main(ActivityThread.java:5319)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:372)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1016)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)

2 个答案:

答案 0 :(得分:1)

您的应用程序崩溃在 input1.getText()

因此,根据您的错误 input1 为空,请检查&#34; id&#34;你传递的是正确的 findViewById()是正确的,同样适用于 input2

因为它是自定义AlertDialog,你应该这样做: -

EditText input1  = (EditText) dialog.findViewById(.....);

答案 1 :(得分:0)

你应该像

一样初始化edittext
  View dialogView = inflater.inflate(R.layout.pojedyncze_zadanie,null);
  builder.setView(dialogView);

  EditText input1 = (EditText) dialogView .findViewById(R.id.tematZadania);