Android

removeView function removes only direct child object.

tomato13 2013. 7. 23. 17:33
setContentView(R.layout.voicerecord_img);

TextView l_tv = new TextView(this);
l_tv.setText("you can do it");
l_tv.setTextColor(Color.WHITE);
l_tv.setBackgroundColor(Color.BLUE);

TextView l_tv2 = new TextView(this);
l_tv2.setText("hello");
l_tv2.setTextColor(Color.WHITE);
l_tv2.setBackgroundColor(Color.YELLOW);

FrameLayout l_fr = new FrameLayout(this);

RelativeLayout.LayoutParams l_layoutParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

l_layoutParams.leftMargin = 500;
l_layoutParams.topMargin = 100;

l_fr.setLayoutParams(l_layoutParams);

l_fr.addView(l_tv);
l_fr.addView(l_tv2);

((RelativeLayout) findViewById(R.id.layout1)).addView(l_fr);
((RelativeLayout) findViewById(R.id.layout1)).removeView(l_tv2);                 (1)



In uppter code, do you think that l_tv2 was removed really?
( Keep an eye on (1) )
No. 

TextView l_tv = new TextView(this);
l_tv.setText("you can do it");
l_tv.setTextColor(Color.WHITE);
l_tv.setBackgroundColor(Color.BLUE);

TextView l_tv2 = new TextView(this);
l_tv2.setText("hello");
l_tv2.setTextColor(Color.WHITE);
l_tv2.setBackgroundColor(Color.YELLOW);

FrameLayout l_fr = new FrameLayout(this);

RelativeLayout.LayoutParams l_layoutParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

l_layoutParams.leftMargin = 500;
l_layoutParams.topMargin = 100;

l_fr.setLayoutParams(l_layoutParams);

l_fr.addView(l_tv);
l_fr.addView(l_tv2);

l_fr.removeView(l_tv2);                  (2)
((RelativeLayout) findViewById(R.id.layout1)).addView(l_fr);
//((RelativeLayout) findViewById(R.id.layout1)).removeView(l_tv2);

How about this?
( Keep an eye on (2) )
Yes, l_tv2 was removed. 

TextView l_tv = new TextView(this);
l_tv.setText("you can do it");
l_tv.setTextColor(Color.WHITE);
l_tv.setBackgroundColor(Color.BLUE);

TextView l_tv2 = new TextView(this);
l_tv2.setText("hello");
l_tv2.setTextColor(Color.WHITE);
l_tv2.setBackgroundColor(Color.YELLOW);

FrameLayout l_fr = new FrameLayout(this);

RelativeLayout.LayoutParams l_layoutParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

l_layoutParams.leftMargin = 500;
l_layoutParams.topMargin = 100;

l_fr.setLayoutParams(l_layoutParams);

l_fr.addView(l_tv);
l_fr.addView(l_tv2);

//l_fr.removeView(l_tv2);
((RelativeLayout) findViewById(R.id.layout1)).addView(l_fr);
((FrameLayout)(((RelativeLayout) findViewById(R.id.layout1)).getChildAt(0))).removeView(l_tv2);               (3)

How about this?
( Keep an eye on (3) )
Yes, l_tv2 was removed. 

In other words, removeView function removes only direct child object.