I creating in adapter radio buttons as follows:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (vi == null) {
LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi = li.inflate(R.layout.row, null);
} else {
vi = convertView;
}
final ItemFormRow item = items.get(position);
v = new ViewHolder();
v.answerGroup = (RadioGroup) vi.findViewById(R.id.answerGroup);
v.answerGroup.removeAllViews();
for (int i=0; i<answers.size(); i++) {
RadioButton rb = answers.get(i);
v.answerGroup.addView(rb);
}
return vi;
}
I use onSaveInstanceState
for state saving items for adapter in activity:
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putParcelableArrayList("test", listItems);
super.onSaveInstanceState(outState);
}
Retrieving then in onCreate
method.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
listItems = savedInstanceState.getParcelableArrayList("test");
}
....
}
When I rotate the device (stop on line: v.answerGroup.addView(rb))
gets exception:
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
If I removed - onSaveInstanceState
, so everything works fine and an exception is not thrown.
I need to save state. Can you help me how to fix it?