• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps The specified child already has a parent. You must call removeView() on the child's parent first, Wh

The specified child already has a parent. You must call removeView() on the child's parent first, Wh

  • 2

    Votes: 0 0.0%
  • 5

    Votes: 0 0.0%

  • Total voters
    0
A

Android Question

Guest
Please find my implementation of getView() in my adapter class which extends BaseAdapter().

public View getView(int position, View convertView, ViewGroup parent) {

View vi = convertView;
ViewHolder holder = null;
tempValues=null;

if(position <ArrayListObj.size()){
tempValues = (ObjectCLASS) ArrayListObj.get(position);

if (convertView == null) {
holder = new ViewHolder();
holder.position = position;
if(tempValues.getType()==EventListItem.Cond1 || tempValues.getType()==EventListItem.Cond2){
if(tempValues.getType()==EventListItem.Cond1)
vi = inflater.inflate(R.layoutM1, null);
else if(tempValues.getType()==EventListItem.Cond2)
vi = inflater.inflate(R.layoutM2, null);

//dynamic content is getting added here

middleContentTopRapperView = new LinearLayout(mContext);
middleContentTopRapperView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
middleContentTopRapperView.setOrientation(LinearLayout.VERTICAL);

//static content from xml layout added here

holder.t1 = (TextView) vi.findViewById(R.id.t1);
holder.m1 = (TextView) vi.findViewById(R.id.m1);
holder.rightView = (View) vi.findViewById(R.id.rightView);//one of(right child view) child of parentRowItemRelativeLayout
holder.r1 = (TextView) vi.findViewById(R.id.r1);
holder.lh1 = (TextView) vi.findViewById(R.id.lh1);
holder.im1 = (ImageView) vi.findViewById(R.id.im1);
holder.li1 = (LinearLayout) vi.findViewById(R.id.li1);

// extracting the parent layouts from the xml to add the last child dynamically
holder.parentRowItemRelativeLayout = (RelativeLayout) vi.findViewById(R.id.parentRowItemRelativeLayout);// row item parent

holder.topRootLayout = (LinearLayout) vi.findViewById(R.id.topRootLayout); // root of the xml
holder.leftView = (RelativeLayout) vi.findViewById(R.id.leftView);// one of(left child view) child of parentRowItemRelativeLayout
holder.count=position;

} else if (tempValues.getType() == CondN2) {
vi = inflater.inflate(R.layout0, null);
holder.viewS1 = (TextView)vi.findViewById(R.id.S1);
} else if (tempValues.getType() == CondN3) {
vi = inflater.inflate(R.layout1, null);
// do get some view of layout1
// do some localization stuff here
//do some x1 stuff here
//do some x stuff here

} else if (tempValues.getType() == condN1) {
vi = inflater.inflate(R.layout2, null);
}
vi.setTag(holder);

} else {
holder = (ViewHolder) vi.getTag();
}
if(tempValues.getType()==Cond1 || tempValues.getType()==Cond2)
{
if (!holder.isYesAdded && tempValues.getValue().getValueType() == "Cond3")
{
addRow("String1", "String2", position,false,holder.topRootLayout,holder.parentRowItemRelativeLayout,holder.leftView,holder.rightView,tempValues.getType());
// above function does this --> middleContentTopRapperView.addView(row);
// where is row is a object of a class which extends LinearLayout and adds some component like text-view .
holder.parentRowItemRelativeLayout.addView(middleContentTopRapperView);
holder.isYesAdded = true;
}
}


}
return vi;
}


I got this Exception when i am trying to add more than 1 list items dynamically to holder.parentRowItemRelativeLayout.

Got the exception here on this line : holder.parentRowItemRelativeLayout.addView(middleContentTopRapperView);

Btw, the way this block will get added dynamically based on the condition, so if that condition fails it will not add, but if one item added based on the condition then if i scroll up or down 4/5 times it will give the same exception.

Say 5 items are there in listview and out of that 1 item is based on the above mentioned condition.

ava.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.addViewInner(ViewGroup.java:4187)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.addView(ViewGroup.java:4040)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.addView(ViewGroup.java:3985)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.addView(ViewGroup.java:3961)
09-24 00:49:22.187: E/AndroidRuntime(15204): at com.bayer.onyx.MyBaseAdapter.getView(MyBaseAdapter.java:538)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.obtainView(AbsListView.java:2842)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.ListView.makeAndAddView(ListView.java:1884)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.ListView.fillDown(ListView.java:713)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.ListView.fillGap(ListView.java:677)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:7030)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:4179)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.onTouchMove(AbsListView.java:5541)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.onTouchEvent(AbsListView.java:5376)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.View.dispatchTouchEvent(View.java:8920)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2673)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2385)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.dispatchTouchEvent(AbsListView.java:5318)
09-24 00:49:22.187: E/AndroidRuntime(15204): at com.bayer.onyx.MyListView.dispatchTouchEvent(MyListView.java:283)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2552)
09-24 00:49:22.187: E/AndroidRuntime(15204): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1767)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.app.Activity.dispatchTouchEvent(Activity.java:2840)
09-24 00:49:22.187: E/AndroidRuntime(15204): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2513)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.View.dispatchPointerEvent(View.java:9125)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4632)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4470)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4020)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4073)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4039)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4153)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4047)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4210)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4020)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4073)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4039)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4047)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4020)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6480)
 
Please find my implementation of getView() in my adapter class which extends BaseAdapter().

public View getView(int position, View convertView, ViewGroup parent) {

View vi = convertView;
ViewHolder holder = null;
tempValues=null;

if(position <ArrayListObj.size()){
tempValues = (ObjectCLASS) ArrayListObj.get(position);

if (convertView == null) {
holder = new ViewHolder();
holder.position = position;
if(tempValues.getType()==Cond1 || tempValues.getType()==Cond2){
if(tempValues.getType()==Cond1)
vi = inflater.inflate(R.layoutM1, null);
else if(tempValues.getType()==Cond2)
vi = inflater.inflate(R.layoutM2, null);

//dynamic content is getting added here

middleContentTopRapperView = new LinearLayout(mContext);
middleContentTopRapperView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
middleContentTopRapperView.setOrientation(LinearLayout.VERTICAL);

//static content from xml layout added here

holder.t1 = (TextView) vi.findViewById(R.id.t1);
holder.m1 = (TextView) vi.findViewById(R.id.m1);
holder.rightView = (View) vi.findViewById(R.id.rightView);//one of(right child view) child of parentRowItemRelativeLayout
holder.r1 = (TextView) vi.findViewById(R.id.r1);
holder.lh1 = (TextView) vi.findViewById(R.id.lh1);
holder.im1 = (ImageView) vi.findViewById(R.id.im1);
holder.li1 = (LinearLayout) vi.findViewById(R.id.li1);

// extracting the parent layouts from the xml to add the last child dynamically
holder.parentRowItemRelativeLayout = (RelativeLayout) vi.findViewById(R.id.parentRowItemRelativeLayout);// row item parent

holder.topRootLayout = (LinearLayout) vi.findViewById(R.id.topRootLayout); // root of the xml
holder.leftView = (RelativeLayout) vi.findViewById(R.id.leftView);// one of(left child view) child of parentRowItemRelativeLayout
holder.count=position;

} else if (tempValues.getType() == CondN2) {
vi = inflater.inflate(R.layout0, null);
holder.viewS1 = (TextView)vi.findViewById(R.id.S1);
} else if (tempValues.getType() == CondN3) {
vi = inflater.inflate(R.layout1, null);
// do get some view of layout1
// do some localization stuff here
//do some x1 stuff here
//do some x stuff here

} else if (tempValues.getType() == condN1) {
vi = inflater.inflate(R.layout2, null);
}
vi.setTag(holder);

} else {
holder = (ViewHolder) vi.getTag();
}
if(tempValues.getType()==Cond1 || tempValues.getType()==Cond2)
{
if (!holder.isYesAdded && tempValues.getValue().getValueType() == "Cond3")
{
addRow("String1", "String2", position,false,holder.topRootLayout,holder.parentRowItemRelativeLayout,holder.leftView,holder.rightView,tempValues.getType());
// above function does this --> middleContentTopRapperView.addView(row);
// where is row is a object of a class which extends LinearLayout and adds some component like text-view .
holder.parentRowItemRelativeLayout.addView(middleContentTopRapperView);
holder.isYesAdded = true;
}
}


}
return vi;
}


I got this Exception when i am trying to add more than 1 list items dynamically to holder.parentRowItemRelativeLayout.

Got the exception here on this line : holder.parentRowItemRelativeLayout.addView(middleContentTopRapperView);

Btw, the way this block will get added dynamically based on the condition, so if that condition fails it will not add, but if one item added based on the condition then if i scroll up or down 4/5 times it will give the same exception.

Say 5 items are there in listview and out of that 1 item is based on the above mentioned condition.

ava.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.addViewInner(ViewGroup.java:4187)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.addView(ViewGroup.java:4040)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.addView(ViewGroup.java:3985)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.addView(ViewGroup.java:3961)
09-24 00:49:22.187: E/AndroidRuntime(15204): at com.bayer.onyx.MyBaseAdapter.getView(MyBaseAdapter.java:538)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.obtainView(AbsListView.java:2842)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.ListView.makeAndAddView(ListView.java:1884)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.ListView.fillDown(ListView.java:713)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.ListView.fillGap(ListView.java:677)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:7030)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:4179)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.onTouchMove(AbsListView.java:5541)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.onTouchEvent(AbsListView.java:5376)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.View.dispatchTouchEvent(View.java:8920)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2673)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2385)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.widget.AbsListView.dispatchTouchEvent(AbsListView.java:5318)
09-24 00:49:22.187: E/AndroidRuntime(15204): at com.bayer.onyx.MyListView.dispatchTouchEvent(MyListView.java:283)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2684)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2400)
09-24 00:49:22.187: E/AndroidRuntime(15204): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2552)
09-24 00:49:22.187: E/AndroidRuntime(15204): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1767)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.app.Activity.dispatchTouchEvent(Activity.java:2840)
09-24 00:49:22.187: E/AndroidRuntime(15204): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2513)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.View.dispatchPointerEvent(View.java:9125)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4632)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4470)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4020)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4073)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4039)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4153)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4047)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4210)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4020)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4073)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4039)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4047)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4020)
09-24 00:49:22.187: E/AndroidRuntime(15204): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:6480)
 
Upvote 0

BEST TECH IN 2023

We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.

Smartphones