我们有 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();
}
但是,如果我卸下,导航抽屉会正常工作。我们想从那里调试。
答案 0 :(得分:2)
这是因为您的 A类不是包含方法DrawerLayout
的类addDrawerListener
的子类。
如果您确实想覆盖该方法,则需要创建一个扩展类DrawerLayout
的新类,并使用该新类实例化抽屉。
答案 1 :(得分:1)
如果要在打开,关闭抽屉时执行某些任务,可以执行以下操作。
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 的建议
扩展类答案 2 :(得分:0)
我们得到了此代码,无法更改。
那是从图书馆来的。您不能修改库的编译版本。
如果我们想更改addDrawerListener怎么办?
扩展任何Java类drawer
(可能是DrawerLayout
)并在那里覆盖addDrawerListener()
,将您的逻辑添加到现有逻辑的超类实现中。然后,在定义drawer
的任何地方使用子类而不是基类。