2011-04-13 108 views
0

我已经按照Android文档创建自定义对话框。当我点击启动我的自定义对话框的应用程序的按钮。崩溃。我如何开始排除故障?启动自定义对话框

对话框:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/relativeLayout1" android:gravity="center_vertical" android:layout_height="wrap_content" android:layout_width="fill_parent"> 
<CheckBox android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/chkBlueTooth" android:id="@+id/chkBlueTooth" android:layout_below="@+id/chkAudio" android:layout_alignLeft="@+id/chkAudio"></CheckBox> 
<Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_below="@+id/chkBlueTooth" android:layout_alignLeft="@+id/chkBlueTooth" android:id="@+id/btnOK" android:text="@string/btnOK"></Button> 
<CheckBox android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/chkNetwork" android:id="@+id/chkNetwork" android:layout_above="@+id/chkBlueTooth" android:layout_toRightOf="@+id/chkBlueTooth"></CheckBox> 
<CheckBox android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/chkWifi" android:id="@+id/chkWifi" android:layout_below="@+id/chkNetwork" android:layout_alignLeft="@+id/chkNetwork" android:layout_alignRight="@+id/chkNetwork"></CheckBox> 
<CheckBox android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/chkAudio" android:id="@+id/chkAudio" android:layout_below="@+id/txtChoose" android:layout_alignLeft="@+id/txtChoose"></CheckBox> 
</RelativeLayout> 

的代码的对话框: 静态最终诠释TIME_DIALOG_ID = 0; static final int POWER_OFF_OPTIONS = 1;

@Override 保护对话框onCreateDialog(int id){ 对话框对话框; switch(id){ case TIME_DIALOG_ID: return new TimePickerDialog(this, mTimeSetListener,mHour24,mMinute,false);

 case POWER_OFF_OPTIONS: 
      AlertDialog.Builder builder; 
      AlertDialog alertDialog; 

      Context mContext = getApplicationContext(); 
      LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); 
      View layout = inflater.inflate(R.layout.options, 
        (ViewGroup)findViewById(R.id.relativeLayout1)); 
      //Capture view elements 
      mChkAudio = (CheckBox) findViewById(R.id.chkAudio); 
      mChkBluetooth = (CheckBox) findViewById(R.id.chkBlueTooth); 
      mChkNetwork = (CheckBox) findViewById(R.id.chkNetwork); 
      mChkWifi = (CheckBox) findViewById(R.id.chkWifi); 
      mBtnOK = (Button) findViewById(R.id.btnOK); 
      mBtnOK.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        DismissPowerOptions(); 
        } 
      }); 
      builder = new AlertDialog.Builder(mContext); 
      builder.setView(layout); 
      alertDialog = builder.create(); 
      //return builder; 
     default: 
      dialog = null; 
     } 
     return dialog; 
    } 

,显示的对话框和崩溃的应用程序的按钮:

mBtnPowerOffOptions.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //stuff for Options dialog 
      showDialog(POWER_OFF_OPTIONS); 
     } 
    }); 
+0

有什么调试信息?您需要将代码分解为简单的操作,直到它工作。然后添加越来越多的功能。 – Thorben 2011-04-13 19:37:09

回答

1

你错了对象上调用findViewById;父视图(或活动)。

后builder.setView(...)做

 
      AlertDialog myDialog = builder.create(); 

现在你可以让你的调用findViewById

 
      //Capture view elements 
      mChkAudio = (CheckBox) myDialog.findViewById(R.id.chkAudio); 
       . 
       . 
       . 
+0

我从来没有真正得到这个工作,并放弃了自定义对话框。我现在可以得到它的工作,现在我有更多的Android编程经验,但现在不需要。我所做的是建立一个自定义列表提醒对话框。这里有一个类似的例子:http://stackoverflow.com/questions/3608018/toggling-check-boxes-in-multichoice-alertdialog-in-android – Andrew 2011-04-26 18:40:10