【问题标题】:In Android AppCompatActivity, can I have an abstract method being implemented by each subclass that extends BaseActivity?在 Android AppCompatActivity 中,我可以让每个扩展 BaseActivity 的子类实现一个抽象方法吗?
【发布时间】: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中被调用,但在setUpMainActivity调用时,setUp已经在MainActivity中实现,只是调用setUp时的顺序是在BaseActivityonCreate方法中定义?

【问题讨论】:

  • 运行上面的代码有什么问题?
  • 没有错误,我只是问这是不是不好的做法
  • 没有。我认为这种方法没有任何问题
  • 一切OK,多态利用好

标签: java android hierarchy


【解决方案1】:

您可以从 BaseActivity 的onCreate 调用setup

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    相关资源
    最近更新 更多