2013-04-11 2 views
0

У меня есть диалог с 4 RadioButton s в RadioGroup и я пытаюсь вернуть ID кнопки, но я продолжаю получать NullPointerException. Я рассмотрел несколько примеров и не вижу, как отличается моя.Почему RadioButton возвращает NULL?

<RadioGroup 
      android:id="@+id/radiojqmobdiv" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:checkedButton="0" 
      android:orientation="horizontal" > 

      <RadioButton 
       android:id="@+id/jqpage" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/jqpage" 
       android:checked="true" /> 

      <RadioButton 
       android:id="@+id/jqheader" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/jqheader" /> 

      <RadioButton 
       android:id="@+id/jqcontent" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/jqcontent" /> 

      <RadioButton 
       android:id="@+id/jqfooter" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/jqfooter" /> 

     </RadioGroup> 

Код:

@Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     preferences = getSharedPreferences("MYPREFS", 0); 

     et = (EditTextLineNumbers) findViewById(R.id.ide); 
     et.setTextColor(preferences.getInt("colourChoice", Color.GREEN)); 
     et.setMaxLines(5000); 
     divBtn = (Button) findViewById(R.id.divbutton); 
     divGroup = (RadioGroup) findViewById(R.id.radiojqmobdiv); 

     exists = false; 
     gestureDetector = new GestureDetector(this, new MyGestureDetector()); 
     gestureListener = new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       return gestureDetector.onTouchEvent(event); 
      } 
     }; 
     web = (WebView) findViewById(R.id.webpreview); 
     web.setOnClickListener(this); 
     web.setOnTouchListener(gestureListener); 
     getWindow().setSoftInputMode(
       WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 
     File dir = new File(Environment.getExternalStorageDirectory() 
       + "/My Webs"); 
     currentDirectory = dir; 
     ListView lv = getListView(); 
     registerForContextMenu(lv); 
     lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

      @Override 
      public boolean onItemLongClick(AdapterView<?> a, View v, 
        int position, long id) { 
       Show_Alert_box(v.getContext(), "Please select action.", 
         position); 
       return false; 
      } 
     }); 

     et.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       changed = true; 
       startPos = et.getSelectionStart(); 
       endPos = et.getSelectionEnd(); 
      } 
     }); 
     if (dir.isDirectory()) { 
      browseToRoot(); 
     } else { 
      dir.mkdir(); 
     } 

     divBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       final Dialog dialog = new Dialog(MainActivity.this); 
       dialog.setContentView(R.layout.divdialog); 
       dialog.setTitle("Inserv Div"); 

       // set the custom dialog components - text, image and button 
       // TextView text = (TextView) dialog.findViewById(R.id.text); 
       // text.setText("Android custom dialog example!"); 
       // ImageView image = (ImageView) 
       // dialog.findViewById(R.id.image); 
       // image.setImageResource(R.drawable.ic_launcher); 

       **Button insertButton = (Button) dialog 
         .findViewById(R.id.insertBtn);** 
       // if button is clicked, close the custom dialog 
       insertButton.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         // int selectedID = divGroup.getCheckedRadioButtonId(); 

         // find the radiobutton by returned id 
         divRdoBtn = (RadioButton) findViewById(selectedID); 

         Toast.makeText(MainActivity.this, divRdoBtn.getText(), 
           Toast.LENGTH_LONG).show(); 
        } 
       }); 

       Button cancelButton = (Button) dialog 
         .findViewById(R.id.cancelBtn); 
       cancelButton.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         dialog.dismiss(); 
        } 
       }); 
       dialog.show(); 
      } 

     }); 

     gestureDetector = new GestureDetector(this, new MyGestureDetector()); 
     gestureListener = new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       return gestureDetector.onTouchEvent(event); 
      } 
     }; 
     loadPrefs(); 
    } 
+0

WHIt stacktrace? – Smit

+0

divGroup инициализируется onCreate(); NullException происходит во int selectedID ... – RapsFan1981

+1

Тогда 'divGroup' является' null' – codeMagic

ответ

1

Вы не отправляли полные XML-файлы как диалогового макета и макет деятельности, поэтому я делаю некоторые предположения здесь.

Однако, вы сказали в своем названии, что Диалог содержит RadioGroup, которую вы назвали divGroup. Если это так, то имеет смысл, что вы не смогли бы найти RadioGroup, когда вы выполняете эту строку:

divGroup = (RadioGroup) findViewById(R.id.radiojqmobdiv); 

Вы искомая в деятельности по идентификатору R.id.radiojqmobdiv, который вы подразумеваемая существует только в том диалоговом окне, которое вы еще не создали. findViewById() возвращает значение null, если представление не найдено, поэтому вы присваиваете значение null divGroup.

Вы должны переместить эту строку вниз после объявления диалогового окна и убедиться, что вы вызываете findViewById на свой объект dialog, а не на активность.

final Dialog dialog = new Dialog(MainActivity.this); 
dialog.setContentView(R.layout.divdialog); 
divGroup = (RadioGroup) dialog.findViewById(R.id.radiojqmobdiv); 
+0

Ahhhtesting сейчас, но у меня такое чувство, что это сработает, это имеет смысл – RapsFan1981

+0

Хорошо! :) Дайте мне знать, если это сработает или я могу добавить к ответу, чтобы помочь больше. – mattgmg1990

Смежные вопросы