2013-05-29 2 views
0

나는 목록보기를 가지고 있으며 항목을 클릭하면 AlertDialog에 Radiobuttons가 표시됩니다. 그러나 alertDialog를 호출하면 앱이 다운됩니다. Logcat은 NullPointerException을 발생시킵니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?Android - Nullpointer AlertDialog를 표시 할 때 listitem을 클릭 할 때 예외가 발생했습니다.

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 = builder.create(); 
    levelDialog.show(); 
    levelDialog.dismiss(); 

에이

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

변화에게 그것을 인스턴스화하기 전에 levelDialog에 함수를 호출하지만 당신은 거기 dismiss()를 호출하는 이유를 잘 모르겠어요. 이 문제가 해결되지 않으면 logcat을 게시하여 NPE이 어디에 있는지 확인하십시오. 더 명확하게하려면이 줄을 전환하면 NPE을 수정해야하지만 dismiss()을 바로 호출해서는 안됩니다.

편집

AlertDialog levelDialog=null; 

을 가지고 선언 등

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

처럼 여기를 초기화하고 onClick()dismiss() 전화 만 사용 dialog.dismiss() 대신 levelDialog.dismiss()

또한, 그 일반적으로 더 나은 그래서 대신 Application ContextActivity Context를 사용하는 Intent 당신은 대화가로 표시되지 않습니다 getApplicationContext()

+1

MyActivity.this에 변경 될 수 있습니다'기각()''.show()'방법 후 즉시했다. – user370305

+0

@ user370305 그 이유는 내가 "왜 당신이'dismiss()'를 호출하는지 확신 할 수 없다는 것입니다. OP가 현재 받고있는 'NPE'를 고쳐야 만하지만 거기에 가지고있는 것이 이해가되지 않습니다. – codeMagic

+0

당신이 말한 것처럼 그것을 바꿨습니다, 지금은 부서지는 것이 아니라 눌렀을 때 아무 것도하지 않습니다. 이 튜토리얼을 따라이 작업을 수행했습니다. http://learnandroideasily.blogspot.be/2013/01/adding-radio-buttons-in-dialog.html 그들은 'levelDialog.dismiss(); } }); levelDialog = builder.create(); levelDialog.show(); ' – mXX

관련 문제