0

Am having trouble with my android application. I wanna create a new View by doing this :

@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);
}

With

public class InheritedView extends ImageView implements AbstractView 

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

But when I test that, my app crash with java.lang.StackOverflowError when executing setLayoutParams(..). However, the following works :

@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 File

FATAL EXCEPTION: main Process: fr.cameleoz.nemo, PID: 30304 java.lang.StackOverflowError 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) 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) 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) 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) at fr.cameleoz.nemo.business.factories.nemoviews.impl.InheritedView.setLayoutParams(InheritedView.java:32) at [...]

Can you explain me why? Thanks

1 Answers1

0

Based on the stacktrace, your InheritedView overrides setLayoutParams() and the overridden method calls itself.

Each nested method call takes up some stack space and this infinite recursion only gets terminated when the stack runs out.

laalto
  • 150,114
  • 66
  • 286
  • 303