Активность Android падает, когда я пытаюсь использовать AlertDialog и пользовательский диалог

Я пишу свое первое приложение для Android, и у меня есть одно действие, которое я хотел бы отобразить в двух отдельных диалогах:

Диалоговое окно A — простое диалоговое окно AlertDialog, которое показывает текст и закрывается Диалоговое окно B — всплывающее окно «Сохранить как» с кнопками EditText и Save и Cancel

Я нашел руководства по созданию AlertDialogs и Custom Dialogs, и мне удалось заставить работать каждый из них, но только по отдельности. Когда я пытаюсь поместить весь код в оператор switch/case в методе onCreateDialog, приложение аварийно завершает работу при запуске AlertDialog.

Вот мой код onCreateDialog:

@Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        // Display dialog
        case 0:  
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
            alertDialog.setMessage(messageText);
            alertDialog.setNegativeButton(android.R.string.ok, 
                    new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {

                }
            });
            return alertDialog.create();    
        // Save As dialog

        case 1: 
            Dialog dialog = new Dialog(this);
            dialog.setContentView(R.layout.save_as);
            dialog.setTitle("Save as:");

            Button cancel = (Button)findViewById(R.id.cancel);
            cancel.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {

                }

            });
            return dialog;  
        }
        return null;

    }

Любой случай будет работать сам по себе, но приложение вылетает, когда я вставляю оба случая.

Вот XML для пользовательского макета диалогового окна:

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

    <TextView 
        android:text="Save this list as:"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <EditText 
        android:id="@+id/list_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@android:drawable/bottom_bar" 
    android:paddingLeft="4.0dip"
    android:paddingTop="5.0dip" 
    android:paddingRight="4.0dip"
    android:paddingBottom="1.0dip" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
        <Button
           android:id="@+id/save" 
           android:layout_width="0.0dip"
        android:layout_height="fill_parent" 
        android:text="Save"
        android:layout_weight="1.0"
            ></Button>
        <Button
            android:id="@+id/cancel" 
            android:layout_width="0.0dip"
        android:layout_height="fill_parent" 
        android:text="Cancel"
        android:layout_weight="1.0"
            ></Button>

    </LinearLayout>

</LinearLayout>

Должен ли я придерживаться только одного формата или другого? Я также читал, что DialogFragments теперь предпочтительнее, но пока не нашел хороших руководств по ним для новичков. Любые предложения будут очень признательны.


person Matt    schedule 27.01.2012    source источник
comment
Приложение: AlertDialog аварийно завершал работу из-за исключения недопустимого аргумента, которое я исправил. Пользовательский диалог вылетает несмотря ни на что, даже если я никогда не запускаю AlertDialog. Это работает, если случай 0 не на месте.   -  person Matt    schedule 27.01.2012
comment
Я понял часть этого. Два диалога работают в операторе switch/case. AlertDialog аварийно завершал работу из-за исключения недопустимого аргумента, а пользовательское диалоговое окно аварийно завершало работу в cancel.setOnClickListener. Я попытался вытащить свой EditText и использовать для него метод setText(), и он также разбился, поэтому, похоже, возникла проблема с установщиками для диалога. Я сделаю еще несколько исследований по этому поводу.   -  person Matt    schedule 28.01.2012
comment
Раздувание макета устранило вылеты, но сеттеры пока не работают.   -  person Matt    schedule 28.01.2012
comment
Все заработало, создав новый класс и расширив Dialog. О счастливый день! Моя мама будет так гордиться.   -  person Matt    schedule 28.01.2012


Ответы (1)


В конце концов я понял, что мне нужно передавать данные в диалоговое окно и из него, и я ориентируюсь на низкий API, поэтому я просто изменил диалоговое окно «Сохранить как» на действие, и все работает нормально. Однако по пути узнал много ограничений диалогов ....

person Matt    schedule 09.02.2012