Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OnCreate not called on Activity

I've created AbstractActivity and an AbstractFormActivity to rid of some boilerplate code, their content may be irrelevant to the question, but I will post it anyway, maybe I misunterstood something so, there they are:

public abstract class AbstractActivity extends ActionBarActivity {

    protected ObjectGraph graph;

    @Inject
    public Bus bus;

    @Inject
    public App app;

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        setContentView(getLayout());
        setupInjection();
    }

    public void setupInjection() {
        graph = ((App) getApplication()).createScopedGraph(getModule());
        graph.inject(this);
        bus.register(this);
        ButterKnife.inject(this);
    }

    protected abstract Object getModule();
    protected abstract int getLayout();
}

and

public abstract class AbstractFormActivity<T extends EntidadeBase> extends AbstractActivity implements Form<T> {

    protected T entity;
    protected Map<View, Boolean> formValidations;
    protected AbstractFormActivity() {
       formValidations = new HashMap<View, Boolean>();
    }

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
    }

    protected boolean passedValidations() {
        for (View key : formValidations.keySet()) {
            if (!formValidations.get(key)) {
                return false;
            }
        }
        return true;
    }

    protected void validateAndSolidify() {
        if (passedValidations()) {
            solidify();
        }
        entity = null;
    }

    @Override
    public void validateMoreComplexFields() {
    }
}

finally I've created an Implementation of those mother Activities:

public class MercadoriaFormActivity extends AbstractFormActivity<Mercadoria> {

...

   @Override
   public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
    }

...

}

My problem is that the onCreate method is not called.

Any help is highly appreciated.

like image 389
Marcos J.C Kichel Avatar asked Apr 25 '15 22:04

Marcos J.C Kichel


People also ask

Is onCreate only called once?

OnCreate is only called once.

How many times is onCreate called?

OnCreate will only be called one time for each lifetime of the Activity. However, there are a number of situations that can cause your activity to be killed and brought back to life. Thus, onCreate will be called again.

Why do we need to call setContentView () in onCreate () of activity class?

As onCreate() of an Activity is called only once, this is the point where most initialization should go: calling setContentView(int) to inflate the activity's UI, using findViewById to programmatically interact with widgets in the UI, calling managedQuery(android.

What is onCreate () meant for?

onCreate() It is called when the activity is first created.


2 Answers

onCreate() version you are currently using is added in Android 21. You should use version below instead:

protected void onCreate (Bundle savedInstanceState)
like image 171
questioner Avatar answered Oct 24 '22 20:10

questioner


I have also faced the same issue. After a couple of hours, I found my mistake, instead on (savedInstanceState: Bundle, persistentState: PersistableBundle) function has to override the below one.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
}
like image 32
Bharat Lalwani Avatar answered Oct 24 '22 20:10

Bharat Lalwani