2016-12-30 78 views
0

我試圖動態地實現一個Radio Group,但我收到一個錯誤消息,說「孩子已經有一個父母先調用removeView()」。下面是我的代碼:在RadioGroup中獲取錯誤

RadioGroup rg = new RadioGroup(getContext()); 
     RadioButton[] allSongsRadio = new RadioButton[countOfAllSongs]; 

     ArrayList<String> allSongsInMap = new ArrayList<>(countOfAllSongs); 
     for(final String eachMood : allSongs.keySet()) { 
      for(String eachSong : allSongs.get(eachMood)) { 
       allSongsInMap.add(eachMood+" : "+eachSong); 
      } 
     } 

     for(int i=0;i<allSongsInMap.size();i++){ 
      final String eachSong = allSongsInMap.get(i); 
      LinearLayout playButtonAndSeekBar = new LinearLayout(getContext()); 
      final FloatingActionButton playButton = new FloatingActionButton(getContext()); 
      playButton.setBackgroundTintList(ColorStateList.valueOf(Color.WHITE)); 
      playButton.setImageResource(R.drawable.play); 
      playButton.setSize(FloatingActionButton.SIZE_MINI); 
      playButton.setId(++playButtonId); 
      SeekBar seekBarForEachSong = new SeekBar(getContext()); 
      layoutDetails = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
      layoutDetails.rightMargin = 50; 
      seekBarForEachSong.setLayoutParams(layoutDetails); 
      allSongsRadio[i] = new RadioButton(getContext()); 
      playButtonAndSeekBar.addView(allSongsRadio[i]); 
      playButtonAndSeekBar.addView(playButton); 
      playButtonAndSeekBar.addView(seekBarForEachSong); 

      eachSongPanel.addView(playButtonAndSeekBar); 
      rg.addView(allSongsRadio[i]); 
      dialogContainer.addView(eachSongPanel); 
     } 
     dialogContainer.addView(rg); 

    } 

需要幫助的人。

+0

請發佈完整的stacktrace並指出代碼中的哪一行導致錯誤。 –

回答

1

您看到這個錯誤,因爲你要添加的同一部件到兩個不同的ViewGroup未在Android允許的(每個元素都屬於一個ViewGroup中家長),還有就是你正在這樣做:

首先你在這裏添加的單選按鈕:

playButtonAndSeekBar.addView(allSongsRadio[i]); 

然後將其添加到電臺組:

rg.addView(allSongsRadio[i]); 

此時allSongsRadio[i]屬於playButtonAndSeekBar,您無法將其添加到另一個ViewGroup。

要更正您的代碼,請將按鈕添加到收音機組,然後最後將整個收音機組添加到playButtonAndSeekBar,以獲取您所需的設計。

+0

仍然收到相同的錯誤。改變像這樣:seekBarForEachSong.setLayoutParams(layoutDetails); allSongsRadio [i] = new RadioButton(getContext()); rg.addView(allSongsRadio [i]); playButtonAndSeekBar.addView(playButton); playButtonAndSeekBar.addView(playButton); playButtonAndSeekBar.addView(seekBarForEachSong); playButtonAndSeekBar.addView(rg); eachSongPanel.addView(playButtonAndSeekBar); dialogContainer.addView(eachSongPanel); } // dialogContainer.addView(rg); – Santanu

+0

你已經產生了另一個錯誤,看看這裏:'playButtonAndSeekBar.addView(rg);'你在每次迭代循環中將'rg'添加到一個新的LinearLayout中。 –

+0

非常感謝你。 :)我想我明白我在做什麼錯了。這些是我所做的改變,但現在雖然我可以看到按鈕,但我仍然可以選擇多個按鈕。 – Santanu