我正在开发一个Android项目,我正在尝试从父类重写方法。我仍然希望该方法完全相同,唯一的事情是我需要再添加一行。这是我的BaseFragment中的方法:
protected void setUpToolBar(String title, boolean home){
Toolbar toolbar = (Toolbar)getView().findViewById(R.id.toolbar);
if (toolbar != null){
toolbar.setTitle(title);
if(home){
toolbar.setNavigationIcon(R.drawable.arrow_left);
}
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
return false;
}
});
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
}
}
当我从FeedFragment(从BaseFragment扩展)调用并添加此行时,我希望保持所有工作正常:
toolbar.inflateMenu(R.menu.menu_main);
我需要这个,因为FeedFragment上的菜单与PostFragment上的菜单不同,两个片段都从BaseFragment继承。
我想我应该这样做:
@Override
private void setUpToolBar(){
toolbar.inflateMenu();
}
虽然不行。关于这个的任何想法?
obs:这个问题被标记为可能重复,但另一个是理论上的,我认为这不会帮助我弄清楚如何解决我的问题。选择的答案只是击中头部。
答案 0 :(得分:5)
你应该覆盖完全相同的方法签名
@override
protected void setUpToolBar(String title, boolean home){
super.setUpToolBar(title,home);
toolbar.inflateMenu();
}
答案 1 :(得分:1)
您正在寻找超级关键字。您可以在重写方法中使用super.foo()从父类调用方法foo。
这是extract:
“访问超类成员
如果您的方法覆盖了其超类的方法之一,则可以通过使用关键字super来调用重写方法。您也可以使用super来引用隐藏字段(尽管不鼓励隐藏字段)。考虑这个类,Superclass:
public class Superclass {
public void printMethod() {
System.out.println("Printed in Superclass.");
}
}
这是一个名为Subclass的子类,它覆盖printMethod():
public class Subclass扩展了超类{
// overrides printMethod in Superclass
public void printMethod() {
super.printMethod();
System.out.println("Printed in Subclass");
}
public static void main(String[] args) {
Subclass s = new Subclass();
s.printMethod();
}
}
在Subclass中,简单名称printMethod()引用在Subclass中声明的名称,它覆盖了Superclass中的名称。因此,要引用从Superclass继承的printMethod(),Subclass必须使用限定名,使用super如图所示。编译和执行Subclass将打印以下内容:
以超类印刷。 印在子类“
答案 2 :(得分:-1)
您需要使用super
@override
protected void setUpToolBar(String title, boolean home) {
super.setUpToolBar(title,home);
toolbar.inflateMenu();
}