我现在写一个组件,大体功能如下:
留一个addViews(list<View> views)
和一个setType(int i )接口
第一个写好了,你传入的views会放入默认布局。
但更换时(setType时)Log会告诉你view有了自己的Parent.我在更改布局的时候也用了this.removeallviews()这个方法,但是没有作用。
我把我的setType(int i)方法贴出来,请高手指教:
public void setType(int i) {
getILayout(i);
this.removeAllViewsInLayout();
this.removeAllViews();
getILayout(i);
}
PS:在布局中是不是child与parent是双向的。我只在parent中remove了,但是没有结果。让我有这样的感觉
PS:这个组件是继承的TableLayout
PS:请高手指点,就差这一点就写完了。
留一个addViews(list<View> views)
和一个setType(int i )接口
第一个写好了,你传入的views会放入默认布局。
但更换时(setType时)Log会告诉你view有了自己的Parent.我在更改布局的时候也用了this.removeallviews()这个方法,但是没有作用。
我把我的setType(int i)方法贴出来,请高手指教:
public void setType(int i) {
getILayout(i);
this.removeAllViewsInLayout();
this.removeAllViews();
getILayout(i);
}
PS:在布局中是不是child与parent是双向的。我只在parent中remove了,但是没有结果。让我有这样的感觉
PS:这个组件是继承的TableLayout
PS:请高手指点,就差这一点就写完了。
解决方案 »
- 关于GridView选中行置顶
- GridView中获取ImageView的问题????sImageView = (ImageView) arg0.getItemAtPosition(arg2)
- android setText()后组件位置发生改变
- 用SurfaceView和MediaPlayer播放视频尺寸问题
- 求助!!!!!query的排序问题,读取联系人
- 怎么让键盘出来的时候背景不压缩?
- android 图片查看程序问题
- 使用HTML5+JQuery Mobile+PhoneGap+Service开发移动应用"钱"途怎么样?
- 面试android手机测试,需要知道些什么?
- 关于手机对HDMI支持的硬件要求
- 这几句代码是什么意思啊?
- mediaPlayer 播放url资源
"You must call removeView() on the child's parent first.");这个异常
想更换ViewGroup时先移除这些view,再把view加到另外个ViewGroup内。
import java.util.ArrayList;
import java.util.List;import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TableLayout;
import android.widget.TableRow;public class ImagePanel extends TableLayout { private Context context;
// current imageview size
private int current_imageview_size;
private List<View> views; // the state of view // the type of layout
public static final int TYPEONE = 1;
public static final int TYPETWO = 2;
public static final int TYPETHREE = 3;
public static final int TYPEFOUR = 4;
//colum and row in this tablelayout
private TableRow onerow;
private TableRow tworow;
private TableRow threerow;
private TableRow fourrow;
private List<TableRow> rows; public ImagePanel(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
this.context=context;
this.setStretchAllColumns(true);
this.setShrinkAllColumns(true);
onerow=new TableRow(context);
tworow=new TableRow(context);
threerow=new TableRow(context);
fourrow=new TableRow(context);
rows=new ArrayList<TableRow>();
rows.add(onerow);
rows.add(tworow);
rows.add(threerow);
rows.add(fourrow);
} public ImagePanel(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.context=context;
this.setStretchAllColumns(true);
this.setShrinkAllColumns(true);
} // the interface used to add views
public void addviews(List<View> views) { this.views = views;
current_imageview_size = views.size();
getILayout(TYPEONE);
} public void setType(int i) {
getILayout(i);
this.removeAllViewsInLayout();
this.removeAllViews();
for(int row=0;i<rows.size();row++){
rows.get(row).removeAllViews();
}
getILayout(i);
} // set the layout
private void getILayout(int type) { switch (current_imageview_size) {
case 1:// 一张
switch (type) {
case TYPEONE:// 第一种布局(1,1)
addView(views.get(0));
break;
}
break;
case 2:// 二张
switch (type) {
case TYPEONE:// 第一种布局(2,1)
onerow.removeAllViews();
onerow.addView(views.get(0));
this.addView(onerow, getLayoutParams());
tworow.removeAllViews();
tworow.addView(views.get(1));
this.addView(tworow, getLayoutParams()); break;
case TYPETWO:// 第二种布局(1,2)
onerow.removeAllViews();
onerow.addView(views.get(0));
onerow.addView(views.get(1));
this.addView(onerow, getLayoutParams()); break;
}
break;
case 3:// 三张
switch (type) {
case TYPEONE:// 第一种布局(3,1)
onerow.addView(views.get(0));
this.addView(onerow, getLayoutParams()); tworow.addView(views.get(1));
this.addView(tworow, getLayoutParams()); threerow.addView(views.get(2));
this.addView(threerow, getLayoutParams());
break;
case TYPETWO:// 第二种布局(1,3)
onerow.addView(views.get(0));
onerow.addView(views.get(1));
onerow.addView(views.get(2));
this.addView(onerow, getLayoutParams());
break;
case TYPETHREE:// 第三种布局(2,1) 2(1,2)
TableRow.LayoutParams params = new TableRow.LayoutParams();
params.span = 2;
onerow.addView(views.get(0),params);
this.addView(onerow, getLayoutParams()); tworow = new TableRow(context);
tworow.addView(views.get(1));
tworow.addView(views.get(2));
this.addView(tworow, getLayoutParams());
break;
case TYPEFOUR:// 第四种布局(2,1) 1(1,2)
onerow.addView(views.get(0));
onerow.addView(views.get(1));
this.addView(onerow, getLayoutParams());
params = new TableRow.LayoutParams();
params.span = 2;
tworow.addView(views.get(2),params);
this.addView(tworow, getLayoutParams());
break;
}
break;
case 4:// 四张
switch (type) {
case TYPEONE:// 第一种布局(2,2)
onerow.addView(views.get(0));
onerow.addView(views.get(1));
this.addView(onerow, getLayoutParams()); tworow.addView(views.get(2));
tworow.addView(views.get(3));
this.addView(tworow, getLayoutParams());
break;
case TYPETWO:// 第二种布局(1,4)
onerow.addView(views.get(0));
onerow.addView(views.get(1));
onerow.addView(views.get(2));
onerow.addView(views.get(3));
this.addView(onerow, getLayoutParams());
break;
case TYPETHREE:// 第三种布局(4,1)
onerow.addView(views.get(0));
this.addView(onerow, getLayoutParams()); tworow.addView(views.get(1));
this.addView(tworow, getLayoutParams()); threerow.addView(views.get(2));
this.addView(threerow, getLayoutParams()); fourrow.addView(views.get(3));
this.addView(fourrow, getLayoutParams());
break;
case TYPEFOUR:// 第四种布局(2,1) 2(1,3)
TableRow.LayoutParams params = new TableRow.LayoutParams();
params.span = 3;
onerow.addView(views.get(0), params);
this.addView(onerow, getLayoutParams()); tworow.addView(views.get(1));
tworow.addView(views.get(2));
tworow.addView(views.get(3));
this.addView(tworow, getLayoutParams());
break;
}
break;
}
}
}
我是这样写的,其中还有一部分没有写完。当然和现在出现的错误没有关系。
我用的是removeallviews这个方法来释放父控件。请高手指点一二。谢谢了。