我们在A类中有这行代码
drawer.addDrawerListener(toggle);
当按ctrl
+ left click
时,我们得到这个代码,不能改变。
public void addDrawerListener(@NonNull DrawerListener listener) {
if (listener == null) {
return;
}
if (mListeners == null) {
mListeners = new ArrayList<DrawerListener>();
}
mListeners.add(listener);
}
我们希望它显示null
如果监听器是null
,所以我们Override
这个方法并添加到A类。
@Override
public void addDrawerListener(@NonNull DrawerLayout.DrawerListener listener) {
if (listener == null) {
Toast.makeText(getApplication(),"null",Toast.LENGTH_LONG).show();
return;
}
if (mListeners == null) {
mListeners = new ArrayList<DrawerLayout.DrawerListener>();
}
mListeners.add(listener);
}
但后来我们得到了
Method does not override method from its superclass
如果我们想改变addDrawerListener
,我们该怎么办?
编辑
我的课程扩展到AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
if (savedInstanceState == null) {
Toast.makeText(getApplication(), "null", Toast.LENGTH_LONG).show();
RssFragment fragment = new RssFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
drawer.addDrawerListener(toggle);
}
添加部分代码后,导航抽屉无法正常工作
if (savedInstanceState == null) {
Toast.makeText(getApplication(), "null", Toast.LENGTH_LONG).show();
RssFragment fragment = new RssFragment();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
但如果我删除,导航抽屉工作正常。我们想从那里调试。
我们得到这个代码,不能改变。
那是来自图书馆。您无法修改库的编译版本。
如果我们想要更改addDrawerListener,我们该怎么办?
扩展任何Java类drawer
(可能是DrawerLayout
)并覆盖那里的addDrawerListener()
,添加你的逻辑并链接到现有逻辑的超类实现。然后,无论您在哪里定义drawer
,都要使用您的子类而不是基类。
这是因为你的A类不是包含方法DrawerLayout
的类addDrawerListener
的子类。
如果您真的想要覆盖该方法,则需要创建一个扩展类DrawerLayout
的新类,并使用该新类来实例化您的抽屉。
如果您想在抽屉打开,关闭时执行某项任务,您可以执行此类操作。
drawer.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(@NonNull View drawerView) {
}
@Override
public void onDrawerClosed(@NonNull View drawerView) {
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
这里DrawerListener
是一个在DrawerLayout
中声明的接口,因为我们已经知道如果我们在类中实现,我们必须实现接口的所有方法
在你的情况下,你不这样做Method does not override method from its superclass
在DrawerLayout类中,当您向上滚动时,您将看到此界面
Nabin Bhandari建议,另一个选择是扩展课程