диалоговое окно пользовательского предупреждения не отображается

Я хочу отобразить пользовательский диалог предупреждений, структура которого определена в файле XML. Это код, который я использовал.

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(findViewById(R.layout.inputform));
builder.show();

Он срабатывает при нажатии кнопки. Однако окно не отображалось. Я получил этот прозрачный серый слой поверх экрана и не мог ни на что нажать. Однако некоторые базовые коды, такие как использование setMessage или отображение флажков, работают хорошо. Может ли кто-нибудь указать, где я ошибаюсь?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent">

<TableLayout android:id="@+id/TableLayout01"
    android:layout_width="fill_parent" android:layout_height="fill_parent">

<TableRow android:id="@+id/TableRow01" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:text="Room name" android:id="@+id/TextView01"
        android:layout_width="fill_parent" android:layout_height="wrap_content"/>
    <EditText android:hint="Enter room name" android:id="@+id/EditText01"
        android:layout_width="0dp" android:layout_height="wrap_content"
        android:layout_weight="1"/>
</TableRow>

<TableRow android:id="@+id/TableRow02" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView android:text="Point id" android:id="@+id/TextView02"
        android:layout_width="fill_parent" android:layout_height="wrap_content"/>
    <EditText android:hint="Enter point id" android:id="@+id/EditText02"
        android:layout_width="0dp" android:layout_height="wrap_content"
        android:layout_weight="1"/>
</TableRow>

<TableRow android:id="@+id/TableRow03" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Button android:text="OK" android:id="@+id/btnOK"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</TableRow>

</TableLayout>
</LinearLayout>

person springrolls    schedule 28.01.2011    source источник


Ответы (5)


Это связано с тем, что findViewById предназначен для поиска определенного представления в макете текущей активности, а не для загрузки всего макета.

Вы можете использовать ответ @Matt или, может быть, вы можете раздуть макет с LayoutInflater следующим образом:

LayoutInflater li = getLayoutInflater();
View v = li.inflate(R.layout.inputform);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(v);
builder.show();

(не пробовал, но думаю должно сработать).

person maid450    schedule 28.01.2011
comment
Я пробовал это раньше, и это не сработало. Только сейчас понял, что допустил ошибку при предоставлении parentView. Спасибо! Принимая это как ответ для полноты. - person springrolls; 28.01.2011

попробуй это:

Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.inputform);
dialog.show();
person Matt    schedule 28.01.2011
comment
Оно работает! Но я ожидаю принятия вашего ответа, так как хочу попробовать решение maid450. Кстати, в чем разница между использованием Dialog и AlertDialog? Имеет ли значение принадлежность к суперклассу? - person springrolls; 28.01.2011

Попробуйте добавить builder.create(); перед builder.show().

person John J Smith    schedule 28.01.2011
comment
Нет, это не работает. Я пробую другие предложения. Спасибо, в любом случае! - person springrolls; 28.01.2011

Вы можете использовать следующий класс

import android.app.Dialog;
import android.content.Context;

public class CustomDialog extends Dialog {


    public CustomDialog(Context context) {
        super(context);

        }


    public static CustomDialog show(Context context, CharSequence title,
            CharSequence message) {
        return show(context, title, message, false);
    }

    public static CustomDialog show(Context context, CharSequence title,
            CharSequence message, boolean indeterminate) {
        return show(context, title, message, indeterminate, false, null);
    }

    public static CustomDialog show(Context context, CharSequence title,
            CharSequence message, boolean indeterminate, boolean cancelable) {
        return show(context, title, message, indeterminate, cancelable, null);
    }

    public static CustomDialog show(Context context, CharSequence title,
            CharSequence message, boolean indeterminate,
            boolean cancelable, OnCancelListener cancelListener) {
        CustomDialog dialog = new CustomDialog(context);
        dialog.setTitle(null);
        dialog.setCancelable(cancelable);
        dialog.setOnCancelListener(cancelListener);


        dialog.setContentView(R.layout.test);
        dialog.show();

        return dialog;
    }
            }
person Tanmay Mandal    schedule 28.01.2011

Простой способ представить диалог...

AlertDialog dialog ;

AlertDialog.Builder builder=new AlertDialog.Builder(this);

builder.setTitle("Your Title Here");

builder.setView(view);//view is your inflate xml layout

dialog = builder.create();

    dialog.show();


dialog.dismiss();//whenever you want to dismiss ,put this line

простой диалог здесь

person Ramesh Akula    schedule 24.10.2011