Android Studio 1.1 Beta 4


你好,

我期待下面的一些源代码,但我不明白其背后的原因。我能理解这部分

 ActionBarDrawerToggle mActionBarDrawerToggle =
                    new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.open, R.string.close)


使用带有5个参数的构造函数创建ActionBarDrawerToggle的新实例。

令人困惑的部分是为什么括号之后,我之前从未见过。这是做某事的捷径吗?:

{
    @Override
    public void onDrawerOpened(View drawerView) {
        super.onDrawerOpened(drawerView);
    }

    @Override
    public void onDrawerClosed(View drawerView) {
        super.onDrawerClosed(drawerView);
    }
};


完成:

 private void init() {
        ActionBarDrawerToggle mActionBarDrawerToggle =
                new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.open, R.string.close) {
                    @Override
                    public void onDrawerOpened(View drawerView) {
                        super.onDrawerOpened(drawerView);
                    }

                    @Override
                    public void onDrawerClosed(View drawerView) {
                        super.onDrawerClosed(drawerView);
                    }
                };

最佳答案

ActionBarDrawerToggle实现具有抽象方法的DrawerLayout.DrawerListener。这意味着您必须定义它们。
ActionBarDrawerToggle确实定义了它们本身,但是您可以在构造函数之后在{}中覆盖它们。实际上,您正在创建ActionBarDrawerToggle的匿名子类。 (没有名字的班级)

您可以在Java documantation中阅读

关于java - 使用一些令人困惑的代码初始化ActionBarDrawerToggle,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28498211/

10-12 02:54