Я использую Dagger2.22 для инъекции MainActivity , которая расширяет BaseActivity , а BaseActivity расширяет DaggerAppCompatActivity . Кажется, что методы onCreate()
обоих действий не вызываются, поскольку я вызывал функцию внутри onCreate () из BaseActivity , и это не работало, когда я поставил операторы log внутри них также не распечатываются, и когда я установил отладчик на onStart () и onCreate () обеих операций затем получается, что вместо onCreate () вызывается метод onStart () метод MainActivity с последующим onStart () из BaseActivity вызывается. Хотя MainActivity отображается, и если бы он был создан, то вызывался бы метод onCreate () , но никакой код внутри метода onCreate () не работает ни они не вызваны в отладке. Я не понимаю, что, черт возьми, происходит?
BaseActivity
public abstract class BaseActivity extends DaggerAppCompatActivity {
private static final String TAG = BaseActivity.class.getSimpleName();
@Inject
public SessionManager sessionManager;
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
Log.d(TAG, "onCreate: ");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
private void subscribeObservers(){
Log.d(TAG, "subscribeObservers: ");
sessionManager.getAuthUser().observe(this, new Observer<AuthResource<User>>() {
@Override
public void onChanged(AuthResource<User> userAuthResource) {
Log.d(TAG, "onChanged: auth resource ==> " + userAuthResource + "auth status ==> " + userAuthResource.status);
if (userAuthResource != null) {
Log.d(TAG, "onChanged: auth status ==> " + userAuthResource.status);
switch (userAuthResource.status) {
case LOADING: {
break;
}
case AUTHENTICATED: {
Log.d(TAG, "onChanged: LOGIN SUCCESS: " + userAuthResource.data.getEmail());
break;
}
case ERROR: {
Toast.makeText(BaseActivity.this, userAuthResource.message +
"\nDid you enter number between 1 and 10",
Toast.LENGTH_SHORT).show();
break;
}
case NOT_AUTHENTICATED: {
navLoginScreen();
break;
}
}
}
}
});
}
private void navLoginScreen(){
Intent intent = new Intent(this, AuthActivity.class);
startActivity(intent);
finish();
}
}
MainActivity
public class MainActivity extends BaseActivity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate: ");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.logout: {
sessionManager.logout();
return true;
}
default:
return super.onOptionsItemSelected(item);
}
}
}
Это модуль, который я вставил в компонент
ActivityBuildersModule
@Module
public abstract class ActivityBuildersModule {
@ContributesAndroidInjector(modules = {
AuthViewModelsModule.class,
AuthModule.class
})
abstract AuthActivity contributeAuthActivity();
@ContributesAndroidInjector
abstract MainActivity contributeMainActivity();
}