2011-01-28 3 views
1

Я хочу отобразить диалоговое окно настраиваемого предупреждения, структура которого была определена в файле 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> 
+0

своего диалог кода XML? – WarrenFaith

ответ

6

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

Вы можете использовать @Matt's ответ или, может быть, вы можете надуть макет с LayoutInflater, как это:

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

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

+0

Я пробовал это раньше, и это не сработало. Теперь я понял, что ошибся в поставке parentView. Благодаря! Принимая это как ответ за полноту. – springrolls

4

попробовать это:

Dialog dialog = new Dialog(this); 
dialog.setContentView(R.layout.inputform); 
dialog.show(); 
+1

Он работает! Но я ожидаю ответа на ваш ответ, поскольку хочу попробовать решение maid450. Кстати, в чем разница между использованием Dialog и AlertDialog? Имеет ли разница в суперклассе? – springrolls

+1

+1 для альтернативного ответа. Благодаря! – springrolls

1

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

+0

Нет, это не сработает. Я пробую другие предложения. Спасибо, в любом случае! – springrolls

1

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

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; 
    } 
      } 
1

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

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 

простого диалогового here

Смежные вопросы