2013-05-29 22 views
0

我有一個列表視圖,當我點擊一個項目時,它應該顯示一個帶有Radiobuttons的AlertDialog。但是當調用alertDialog時,應用程序崩潰。 Logcat給出了一個NullPointerException。我究竟做錯了什麼?Android - 空指針異常點擊listitem顯示AlertDialog

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(); 
       } 
      } 
     }); 
    } 

回答

2

您正在呼籲levelDialog功能它實例化它

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

變化

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

之前,但我不知道爲什麼你在呼喚dismiss()那裏。如果這不能解決它,那麼請發佈logcat,以便我們知道NPE在哪裏。更清楚的是,切換這些行應該修復你的NPE,但不應該在那裏調用dismiss()

編輯

取出這個

AlertDialog levelDialog=null; 

,並宣佈這裏初始化它像這樣

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

,並在您onClick()調用dismiss()而是改用的dialog.dismiss()levelDialog.dismiss()

而且,其通常最好使用Activity Context代替Application Context所以你Intent你可能會改變getApplicationContext()MyActivity.this

+1

對話框不顯示爲'解僱()''後.show()'方法稱爲立竿見影。 – user370305

+0

@ user370305我知道,這就是爲什麼我說「但我不確定你爲什麼要調用'dismiss()'」。應該修復'NPE' OP當前正在獲取,但是沒有意義在那裏 – codeMagic

+0

我改變了它,就像你說的,現在它沒有崩潰,但它沒有按下時做任何事情。我按照這個教程來完成這個。 http://learnandroideasily.blogspot.be/2013/01/adding-radio-buttons-in-dialog.html他們像這樣把'levelDialog.dismiss(); } }); levelDialog = builder.create(); levelDialog.show();' – mXX