开发者

Launching a Custom Dialog

I've followed the Android Documentation on creating a custom dialog. When I click the button that launches my custom dialog the app. crashes. How do I begin to troubleshoot this?

The dialog:

<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>

The Code for the dialog: static final int TIME_DIALOG_ID = 0; static final int POWER_OFF_OPTIONS = 1;

@Override protected Dialog onCreateDialog(int id) { Dialog dialog; 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;
    }

The Button that shows the dialog and crashes the app:

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


You are calling findViewById on the wrong object; the parent View (or Activity).

After builder.setView(...) do

            AlertDialog myDialog = builder.create();

Now you can make your calls to findViewById

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜