【发布时间】:2018-03-16 10:58:23
【问题描述】:
假设我有一个基类BaseActivity,它扩展了AppCompatActivity。在BaseActivity 里面,我有:
public abstract class BaseActivity extends AppCompatActivity {
protected abstract void setUp();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setUp();
}
}
那么我所有的Activity类扩展BaseActivity,如下:
public class MainActivity extends BaseActivity implements SwipeRefreshLayout.OnRefreshListener {
private ActivityMainBinding mBinding;
private FeedTopicsFragment mFeedTopicsFragment;
private UserDiscussionsFragment mUserDiscussionsFragment;
private UserConversationsFragment mUserConversationsFragment;
private final String TAG = getClass().getSimpleName();
@Override
protected void setUp() {
mBinding = DataBindingUtil.setContentView(MainActivity.this, R.layout.activity_main);
String signedInUserId = SessionPersistor.getSignedInUserId();
if (signedInUserId == null) {
NavigationHelper.goToSignInUserActivity(this);
return;
}
setSupportActionBar(mBinding.activityMainAppbar);
// do other stuff to mBinding etc, all at the beginning of onCreate
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadData();
}
}
这种实现是否可能?我想省去每次都记得打电话给setUp 的麻烦,因为对于每个活动都是一样的:在onCreate 中,我必须设置视图等。这是否会引发异常,因为setUp 是一个抽象方法,但在BaseActivity onCreate中被调用,但在setUp被MainActivity调用时,setUp已经在MainActivity中实现,只是调用setUp时的顺序是在BaseActivityonCreate方法中定义?
【问题讨论】:
-
运行上面的代码有什么问题?
-
没有错误,我只是问这是不是不好的做法
-
没有。我认为这种方法没有任何问题
-
一切OK,多态利用好