2014-06-18 51 views
0

我的Android应用程序有问题。我想通过这样做,创建一个新的观点:关于继承视图的setLayoutParams

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    LinearLayout l = (LinearLayout)findViewById(R.id.mainActivity); 
    f = new InheritedView(this); 
    f.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); 
    l.addView(f); 
} 

随着

public class InheritedView extends ImageView implements AbstractView 

public InheritedView(Context context) { 
    super(context); 
} 

但是,当我测试,执行setLayoutParams当我的应用程序崩溃与java.lang.StackOverflowError的(..)。 但是,下面的工作:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    LinearLayout l = (LinearLayout)findViewById(R.id.mainActivity); 
    f = new ImageView(this); 
    f.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); 
    l.addView(f); 
} 

logcat的文件

致命异常:主 工艺:fr.cameleoz.nemo,PID:30304 java.lang.StackOverflowError的 在fr.cameleoz.nemo。 business.factories.nemoviews.impl.InheritedView.setLayoutParams(InheritedView.java:32) at fr.cameleoz.nemo.business.factories.nemoviews.impl.InheritedView.setLayoutParams(InheritedView.java:32) at fr.cameleoz。 nemo.business.factories.nemoviews.impl.InheritedView.setLayoutParams(InheritedView.java:32)(继承视图.java:32) (继承的视图)。在32位客户端上, ...) at [012]你能解释我为什么吗? 谢谢

+0

您是否尝试切换addView和setLayoutParams行? – Blackbelt

+0

我有。它崩溃,因为缺乏必要的参数,我猜... –

+0

有一些东西在logcat中出现。应用程序不会无缘无故地崩溃。 –

回答

0

根据堆栈跟踪,你的InheritedView覆盖setLayoutParams()和重写的方法调用自己。

每个嵌套的方法调用占用一些堆栈空间,而这个无限递归只在堆栈用完时被终止。

+0

真的!我从未想过......非常感谢! –