

在做android UI 的时候,遇到了一个问题,因为不同的UI之间需要相互切换。所以不加思索的写了下面的程式
public class FirstLayout extends LinearLayout {
public FirstLayout (Context context) {
super(context);
initial(context);
}
void initialize(final Context context,t) {
addView(new SecondLayout(context, eventlist));
}
}
public class SecondLayout extends LinearLayout {
public SecondLayout (Context context) {
super(context);
initial(context);
}
void initialize(Context context) {
initial(new FirstLayout(contextt));
}
}
在这种情况下,比如说,我们点击button,页面进行跳转。但是会进行不断的入栈操作,最终导致stack overflow.
所以为了避免这种情况的出现,要进行另外一种操作,在定义个整体布局,然后分开处理
public class FatherClass extends LinearLayout{
private LinearLayout sonLayout = null;
private LinearLayout daughterLayout = null;
private Button AButton = null;
private Button BButton = null;
public FatherClass (Context context) {
supper(context);
initial(context);
}
initial(Context context) {
AButton.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
removeView(sonLayout )
addView(daughterLayout);
}
});
BButton.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
removeView(daughterLayout)
addView(sonLayout);
}
});
}
/*generate sonLayout*/
void addSonLayout(Context){
sonLayout = new LinearLayout(context);
.........
}
/*generate daughterLayout*/
void addDaughterLayout(Context){
daughterLayout = new LinearLayout(context);
.........
}
}
其中,用的是removeView ,删除这样一个子布局,而不是用removeAllViews。这样做的好处就是可以做到局部处理。
从而避免了嵌套入栈操作。所以这一点在多页面布局的时候应该考虑到。
扫一扫在手机打开