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);
}
};
答案 0 :(得分:1)
给定的结构:
SomeType st = new SomeType(){
...
}
创建匿名子类扩展SomeType
并允许覆盖/添加方法,添加成员,进行初始化等
在您的情况下,{}
会创建一个扩展ActionBarDrawerToggle
并覆盖方法onDrawerOpened()
和onDrawerClosed()
的匿名子类。
P.S。当您只需要上课一次时它非常有用。
答案 1 :(得分:0)
ActionBarDrawerToggle实施DrawerLayout.DrawerListener,其中包含抽象方法。这意味着您必须定义它们。
ActionBarDrawerToggle会自己定义它们,但是你可以在构造函数之后在{}
中覆盖它们。实际上,您正在创建ActionBarDrawerToggle的匿名子类。 (没有名字的班级)