中断super.onCreate()的超类
问题描述:
我在这我要检查身份验证需要先登录活动基地活动,既onCreate
和onResume
:中断super.onCreate()的超类
例如HomeActivity:
public class HomeActivity extends AccountRequiredActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
}
}
public class AccountRequiredActivity extends LifecycleActivity {
private final int INTENT_REQUEST_CODE = 1;
@Inject
ViewModelProvider.Factory viewModelFactory;
private AccountViewModel accountViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidInjection.inject(this);
accountViewModel = ViewModelProviders.of(this, viewModelFactory).get(AccountViewModel.class);
checkAuthentication();
}
@Override
protected void onResume() {
super.onResume();
checkAuthentication();
}
private void checkAuthentication() {
// Check if authenticated synchronously
if(!accountViewModel.isAuthenticated()) {
getLogin();
};
}
private void getLogin() {
Intent intent = new Intent(this, LoginActivity.class);
startActivityForResult(intent, INTENT_REQUEST_CODE);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == INTENT_REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
// The login is ok, continue
} else {
getLogin();
}
}
}
}
LoginActivity
是一个单独的活动,管理登录流(连接到FB服务器和我自己的)。
此代码有2个问题。
第一个问题是当isAuthenticated
为false时,我不希望该方法返回到调用的子Activity(在这种情况下为HomeActivity
),因为不应设置Home的setContentView。
第二个问题是,onActivityResult
异步调用(如在LoginActivity
的登录流程作为一个事实问题。
如何解决这个代码,以便我能够让基类的身份验证检查?,而只有继续打电话setContentView
当认证成功时
答
在基地Activity
做这样的事情:
@Override
protected final void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Do your authentication stuff here
if (auth is successfull) {
// Call derived Activity's "doOnCreate()" to set content view, etc.
doOnCreate(savedInstanceState);
} else {
// Here you can do whatever you need to do in case the auth fails
}
}
从覆盖声明的方法final
防止衍生活动它。
还在基础Activity
中创建抽象方法doOnCreate()
,每个派生的Activity
需要覆盖。
每个派生的Activity
不应该覆盖onCreate()
,但实现doOnCreate()
并实现其所有的初始化。
对不起,花了一些时间来验证它,本周我很忙。但它的作品! – Trace