0

リストビューがあり、アイテムをクリックすると、ラジオボタンを含む AlertDialog が表示されます。しかし、alertDialog を呼び出すと、アプリがクラッシュします。Logcat は NullPointerException を返します。私は何を間違っていますか?

private void registerClickCallBack() {
        ListView list = (ListView) findViewById(R.id.settingsList);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View viewClicked,
                    int position, long id) {

                if (position == 0) {
                    final AlertDialog levelDialog

                    final CharSequence[] items = { " Easy ", " Medium ",
                            " Hard ", " Very Hard " };

                    AlertDialog.Builder builder = new AlertDialog.Builder(
                            MyActivity.this);
                    builder.setTitle("Select The Difficulty Level");

                    builder.setSingleChoiceItems(items, -1,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int item) {
                                    Intent i = new Intent(
                                            getApplictionContext(),
                                            MyActivity.class);

                                    switch (item) {
                                    case 0:
                                        String msg = "Alert A";
                                        Toast.makeText(
                                                MyActivity.this,
                                                msg, Toast.LENGTH_LONG).show();
                                        break;
                                    case 1:
                                        String msga = "Alert B";
                                        Toast.makeText(
                                                MyActivity.this,
                                                msga, Toast.LENGTH_LONG).show();

                                        break;
                                    case 2:
                                        String msgz = "Alert C";
                                        Toast.makeText(
                                                MyActivity.this,
                                                msgz, Toast.LENGTH_LONG).show();
                                        break;
                                    case 3:
                                        String msge = "Alert E";
                                        Toast.makeText(
                                                MyActivity.this,
                                                msge, Toast.LENGTH_LONG).show();
                                        break;

                                    }

                                }
                            });
                     levelDialog.dismiss();
 levelDialog = builder.create();
 levelDialog.show();
                }

                else if (position == 1) {
                    String msg = "1";
                    Toast.makeText(MyActivity.this, msg,
                            Toast.LENGTH_LONG).show();
                } else if (position == 2) {
                    String msg = "2";
                    Toast.makeText(MyActivity.this, msg,
                            Toast.LENGTH_LONG).show();
                }

                else if (position == 3) {
                    String msg = "3";
                    Toast.makeText(MyActivity.this, msg,
                            Toast.LENGTH_LONG).show();
                }
            }
        });
    }
4

1 に答える 1

2

levelDialogインスタンス化する前に関数を呼び出しています

     levelDialog.dismiss();
     levelDialog = builder.create();
     levelDialog.show();

に変更します

     levelDialog = builder.create();
     levelDialog.show();
     levelDialog.dismiss();

しかし、なぜあなたがdismiss()すぐに電話をかけているのかわかりません。これで解決しない場合は、logcat を投稿してくださいNPE。より明確にするために、これらの行を切り替えると修正されるはずですNPEdismiss()、すぐに呼び出されるべきではありません。

編集

これを取り出して

AlertDialog levelDialog=null;

ここで宣言して初期化します

       final AlertDialog levelDialog = builder.create();
       levelDialog.show();

と呼び出しdismiss()ますが、代わりにonClick()使用しますdialog.dismiss()levelDialog.dismiss()

また、通常はActivity Context代わりに使用する方が良いApplication Contextので、あなたIntentはに変更getApplicationContext()するかもしれませんMyActivity.this

于 2013-05-29T18:30:26.643 に答える